mysqlnd_ms
PHP Manual

Введение

Плагин репликации и балансировки нагрузки (mysqlnd_ms) для mysqlnd позволяет легко добавить поддержку репликации в MySQL ко всем PHP MySQL расширениям, которые используют mysqlnd.

Начиная с версии PHP 5.3.3, встроенный драйвер MySQL (mysqlnd) имеет возможность написания внутренних плагинов, ипользуя API языка C. C-плагины, такие как плагин репликации и балансировки нагрузки, могут расширить функциональность mysqlnd.

Встроенный драйвер MySQL (mysqlnd) - это C-библиотека, которая поставляется вместе с PHP, начиная с версии 5.3.0. Она служит полноценной заменой для клиентской библиотеки MySQL (libmysqlclient). Использование библиотеки mysqlnd имеет несколько преимуществ: не нужно дополнительных библиотек, так как она идет в комплекте с PHP, она под лицензией PHP, ниже потребление памяти в определенных случаях, и она содержит новую функциональность, такую как асинхронные запросы.

Плагины mysqlnd, такие как mysqlnd_ms, в большей части работают прозрачно для пользователя. Плагины репликации и балансировки нагрузки поддерживают все приложения на PHP и все MySQL-раcширения для PHP. Они не изменяют существующее API. Поэтому это может быть легко использовано с существующими PHP-приложениями.

Ключевые особенности

Ключевые особенности плагина PECL/mysqlnd_ms следующие:

Ограничения

Встроенный механизм разграничения чтения и записи очень простой. Каждый запрос, начинающийся с ключевого слова SELECT, рассматривается как читающий запрос и будет отправлен на slave-сервер. Все другие запросы (такие как SHOW) рассматриваются как записывающие запросы и будут посланы к master-серверу MySQL. Этот встроенный механизм может быть переопределен, используя подсказки SQL (SQL hints) или пользовательские callback-функции.

Механизм разграничения чтения и записи не знает об мульти-запросах. Мульти-запросы рассматриваются как один запрос. Решение о перенаправлении запроса основано на начале запроса. Например, при использовании mysqli_multi_query() для выполнения мульти-запроса SELECT id FROM test ; INSERT INTO test(id) VALUES (1), запрос будет перенаправлен к slave-серверу из-за того, что он начинается с ключевого слова SELECT. INSERT-запрос, который является частью мульти-запроса, не будет перенаправлен к master-серверу.

Замечание:

Приложения должны быть осведомлены о последствиях переключения соединений, которые выполняются с целью балансировки. Пожалуйста, обратитесь к документации за информацией об объединении и переключении соединений, обработки транзакций, отказоустойчивости при балансировки нагрузки и механизме разграничения чтения и записи.

Номенклатура

Сокращение mysqlnd_ms означает mysqlnd master slave plugin. Над названием особо не задумывались и он было выбрано быстро. В самом начале разработчики не рассчитывали продолжать дальнейшее использование кода.


mysqlnd_ms
PHP Manual