Spec-Zone .ru
спецификации, руководства, описания, API

21.9.6.8. Функции Mysqlnd_ms

Copyright 1997-2012 PHP Documentation Group.

21.9.6.8.1. mysqlnd_ms_get_last_gtid

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_get_last_gtid

    Возвращает последний глобальный ID транзакции

Описание

string mysqlnd_ms_get_last_gtid(mixed connection);

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

Параметры

connection

Соединение PECL/mysqlnd_ms обрабатывает к серверу MySQL типа PDO_MYSQL, mysqli> или ext/mysql. Дескриптор соединения получается, открывая соединение с именем хоста, которое соответствует mysqlnd_ms запись конфигурационного файла, используя любое из вышеупомянутых трех расширений драйвера MySQL.

Возвращаемые значения

Возвращает глобальный ID транзакции (GTID) на успехе. Иначе, возвраты FALSE .

Функция mysqlnd_ms_get_last_gtid возвращает GTID, полученный, выполняя SQL-оператор от fetch_last_gtid запись global_transaction_id_injection раздел от конфигурационного файла плагинов.

Функция может быть вызвана после того, как GTID был постепенно увеличен.

Примечания

Отметить

mysqlnd_ms_get_last_gtid требует PHP> = 5.4.0 и PECL mysqlnd_ms> = 1.2.0. Внутренне, это использует a mysqlnd библиотека C функциональность, не доступная с PHP 5.3.

Примеры

Пример 21.300. mysqlnd_ms_get_last_gtidпример

<?php/* Open mysqlnd_ms connection using mysqli, PDO_MySQL or mysql extension */$mysqli = new mysqli("myapp", "username", "password", "database");if (!$mysqli)  /* Of course, your error handling is nicer... */  die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));/* auto commit mode, transaction on master, GTID must be incremented */if (!$mysqli->query("DROP TABLE IF EXISTS test"))  die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));printf("GTID after transaction %s\n", mysqlnd_ms_get_last_gtid($mysqli));/* auto commit mode, transaction on master, GTID must be incremented */if (!$mysqli->query("CREATE TABLE test(id INT)"))  die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));printf("GTID after transaction %s\n", mysqlnd_ms_get_last_gtid($mysqli));?>

См. Также

Глобальные ID Транзакции

21.9.6.8.2. mysqlnd_ms_get_last_used_connection

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_get_last_used_connection

    Возвращает массив, который описывает последнее используемое соединение

Описание

array mysqlnd_ms_get_last_used_connection(mixed connection);

Возвращает массив, который описывает последнее используемое соединение от пула соединения плагинов, на который в настоящий момент указывает пользовательский дескриптор соединения. Используя плагин, пользовательский дескриптор соединения представляет пул соединений с базой данных. Не возможно сказать от пользовательских свойств дескрипторов соединения, до которого сервера базы данных от пула указывает пользовательский дескриптор соединения.

Функция может использоваться, чтобы отладить или контролировать PECL mysqlnd_ms.

Параметры

connection

Дескриптор соединения MySQL, полученный из любой из соединить функций mysqli, mysql или расширений PDO_MYSQL.

Возвращаемые значения

FALSE на ошибке. Иначе, массив, который описывает соединение, используемое, чтобы выполнить последний оператор на.

Массив, который описывает соединение.

Свойство Описание Версия
scheme Схема соединения. Также tcp://host:port или unix://host:socket. Если Вы хотите различить, соединения друг от друга используют комбинацию scheme и thread_id как уникальный ключ. Ни один scheme ни thread_id один достаточны, чтобы отличить два соединения друг от друга. Два сервера могут присвоить то же самое thread_id к двум различным соединениям. Таким образом у соединений в пуле может быть то же самое thread_id. Кроме того, не полагайтесь на уникальность scheme в пуле. Ваши инженеры QA могут использовать тот же самый экземпляр сервера MySQL для двух отличных логических ролей и добавить это многократно к пулу. Этот взлом используется, например, в тестовом комплекте. С тех пор 1.1.0.
host Узел сервера базы данных используется с соединением. Узел только устанавливается с соединениями TCP/IP. Это пусто с доменом Unix или соединениями именованного канала Windows, С тех пор 1.1.0.
host_info Символьная строка, представляющая имя узла сервера и тип подключения. С тех пор 1.1.2.
port Порт сервера базы данных используется с соединением. С тех пор 1.1.0.
socket_or_pipe Сокет домена Unix или именованный канал Windows используются с соединением. Значение пусто для соединений TCP/IP. С тех пор 1.1.2.
thread_id Идентификатор потока соединения. С тех пор 1.1.0.
last_message Сообщение информации, полученное из API-функции MySQL C mysql_info (). Пожалуйста, см. mysqli_infoдля описания. С тех пор 1.1.0.
errno Код ошибки. С тех пор 1.1.0.
error Сообщение об ошибке. С тех пор 1.1.0.
sqlstate Ошибка код SQLstate. С тех пор 1.1.0.

Примечания

Отметить

mysqlnd_ms_get_last_used_connection требует PHP> = 5.4.0 и PECL mysqlnd_ms>> 1.1.0. Внутренне, это использует a mysqlnd библиотека C вызывает не доступный с PHP 5.3.

Примеры

Пример принимает это myapp обращается к сменному разделу конфигурационного файла и представляет пул соединения.

Пример 21.301. mysqlnd_ms_get_last_used_connectionпример

<?php$link = new mysqli("myapp", "user", "password", "database");$res = $link->query("SELECT 1 FROM DUAL");var_dump(mysqlnd_ms_get_last_used_connection($link));?>    

Вышеупомянутый пример выведет:

array(10) {  ["scheme"]=>  string(22) "unix:///tmp/mysql.sock"  ["host_info"]=>  string(25) "Localhost via UNIX socket"  ["host"]=>  string(0) ""  ["port"]=>  int(3306)  ["socket_or_pipe"]=>  string(15) "/tmp/mysql.sock"  ["thread_id"]=>  int(46253)  ["last_message"]=>  string(0) ""  ["errno"]=>  int(0)  ["error"]=>  string(0) ""  ["sqlstate"]=>  string(5) "00000"}

21.9.6.8.3. mysqlnd_ms_get_stats

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_get_stats

    Возвраты запрашивают статистика соединения и распределение

Описание

array mysqlnd_ms_get_stats();

Возвращает подбор статистических данных, собранный плагином репликации и выравнивания нагрузки.

Параметр конфигурации PHP mysqlnd_ms.collect_statistics управляет набором статистики. Набор статистики отключается по умолчанию по причинам производительности.

Контекст статистики PHP процесс. В зависимости от Вашей модели a развертывания PHP процесс может обработать один или многократные запросы.

Статистические данные агрегированы для всех соединений и всего обработчика хранения. Не возможно сказать сколько запросов, происходящих из mysqli, PDO_MySQL или mysql Вызовы API способствовали значениям агрегированных данных.

Параметры

У этой функции нет никаких параметров.

Возвращаемые значения

Возвраты NULL если конфигурационная директива PHP mysqlnd_ms.enable отключил плагин. Иначе, подбор статистических данных возвратов.

Подбор статистических данных

Статистическая величина Описание Версия
use_slave

Семантика этой статистической величины изменилась между 1.0.1 - 1.1.0.

Значение для версии 1.0.1 следующие. Число операторов, которые рассматривает как только для чтения встроенный запрос анализатор. Ни операторы, которые начинаются с подсказки SQL, чтобы вызвать использование ведомого устройства, ни операторов, направленных к ведомому устройству определяемым пользователем обратным вызовом, не включаются. Общее количество операторов, отправленных ведомым устройствам, use_slave + use_slave_sql_hint + use_slave_callback.

PECL/mysqlnd_ms 1.1.0 представляет новое понятие цепочечных фильтров. Статистика теперь устанавливается внутренним фильтром выравнивания нагрузки. С версией 1.1.0 фильтр выравнивания нагрузки всегда является последним в цепочке фильтра, если использующийся. В будущих версиях фильтр выравнивания нагрузки может сопровождаться другими фильтрами, вызывающими другое изменение в значении статистической величины. Если в будущем фильтр выравнивания нагрузки будет сопровождаться другим фильтром, то больше не гарантируется, что оператор, который постепенно увеличивается use_slave, будет выполняться на ведомых устройствах.

Значение для версии 1.1.0 следующие. Число операторов, отправленных ведомым устройствам. Операторы, направленные к ведомому устройству пользовательским фильтром (определяемый пользователем обратный вызов), не включаются. Последние считаются use_slave_callback.

С тех пор 1.0.0.
use_master

Семантика этой статистической величины изменилась между 1.0.1 - 1.1.0.

Значение для версии 1.0.1 следующие. Число операторов, которые не рассматривает как только для чтения встроенный запрос анализатор. Ни операторы, которые начинаются с подсказки SQL, чтобы вызвать использование ведущего устройства, ни операторов, направленных к ведущему устройству определяемым пользователем обратным вызовом, не включаются. Общее количество операторов, отправленных ведущему устройству, use_master + use_master_sql_hint + use_master_callback.

PECL/mysqlnd_ms 1.1.0 представляет новое понятие цепочечных фильтров. statictics теперь устанавливается внутренним фильтром выравнивания нагрузки. С версией 1.1.0 фильтр выравнивания нагрузки всегда является последним в цепочке фильтра, если использующийся. В будущих версиях фильтр выравнивания нагрузки может сопровождаться другими фильтрами, вызывающими другое изменение в значении статистической величины. Если в будущем фильтр выравнивания нагрузки будет сопровождаться другим фильтром, то больше не гарантируется, что оператор, который постепенно увеличивается use_master, будет выполняться на ведомых устройствах.

Значение для версии 1.1.0 следующие. Число операторов, отправленных ведущим устройствам. Операторы, направленные к ведущему устройству пользовательским фильтром (определяемый пользователем обратный вызов), не включаются. Последние считаются use_master_callback.

С тех пор 1.0.0.
use_slave_guess Число операторов встроенный запрос, который анализатор рекомендует отправить ведомому устройству, потому что они не содержат подсказки SQL, чтобы вызвать использование определенного сервера. Рекомендация может быть отвергнута в следующем. Не гарантируется, будет ли оператор выполняться на ведомом устройстве или нет. Это то, как часто внутреннее is_select функция предположила, что ведомое устройство должно использоваться. Пожалуйста, см. также функцию пространства пользователя mysqlnd_ms_query_is_select. С тех пор 1.1.0.
use_master_guess Число операторов встроенный запрос, который анализатор рекомендует отправить ведущему устройству, потому что они не содержат подсказки SQL, чтобы вызвать использование определенного сервера. Рекомендация может быть отвергнута в следующем. Не гарантируется, будет ли оператор выполняться на ведомом устройстве или нет. Это то, как часто внутреннее is_select функция предположила, что ведущее устройство должно использоваться. Пожалуйста, см. также функцию пространства пользователя mysqlnd_ms_query_is_select. С тех пор 1.1.0.
use_slave_sql_hint Число операторов, отправленных ведомому устройству, потому что оператор начинается с подсказки SQL, чтобы вызвать использование ведомого устройства. С тех пор 1.0.0.
use_master_sql_hint Число операторов, отправленных ведущему устройству, потому что оператор начинается с подсказки SQL, чтобы вызвать использование ведущего устройства. С тех пор 1.0.0.
use_last_used_sql_hint Число операторов, отправленных серверу, который выполнил предыдущий оператор, потому что оператор начинается с подсказки SQL, чтобы вызвать использование ранее используемого сервера. С тех пор 1.0.0.
use_slave_callback Число операторов, отправленных ведомому устройству, потому что определяемый пользователем обратный вызов выбрал ведомый сервер для выполнения оператора. С тех пор 1.0.0.
use_master_callback Число операторов, отправленных ведущему устройству, потому что определяемый пользователем обратный вызов выбрал главный сервер для выполнения оператора. С тех пор 1.0.0.
non_lazy_connections_slave_success Число успешно открытых ведомых соединений от конфигураций, не используя lazy connections. Общее количество успешно открытых ведомых соединений non_lazy_connections_slave_success + lazy_connections_slave_success С тех пор 1.0.0.
non_lazy_connections_slave_failure Число отказавших ведомых попыток подключения от конфигураций, не используя lazy connections. Общее количество отказавших ведомых попыток подключения non_lazy_connections_slave_failure + lazy_connections_slave_failure С тех пор 1.0.0.
non_lazy_connections_master_success Число успешно открытых основных соединений от конфигураций, не используя lazy connections. Общее количество успешно открытых основных соединений non_lazy_connections_master_success + lazy_connections_master_success С тех пор 1.0.0.
non_lazy_connections_master_failure Число отказавших основных попыток подключения от конфигураций, не используя lazy connections. Общее количество отказавших основных попыток подключения non_lazy_connections_master_failure + lazy_connections_master_failure С тех пор 1.0.0.
lazy_connections_slave_success Число успешно открытых ведомых соединений от использования конфигураций lazy connections. С тех пор 1.0.0.
lazy_connections_slave_failure Число отказавших ведомых попыток подключения от использования конфигураций lazy connections. С тех пор 1.0.0.
lazy_connections_master_success Число успешно открытых основных соединений от использования конфигураций lazy connections. С тех пор 1.0.0.
lazy_connections_master_failure Число отказавших основных попыток подключения от использования конфигураций lazy connections. С тех пор 1.0.0.
trx_autocommit_on Число autocommit активации режима через вызовы API. Это число может использоваться, чтобы контролировать действие, связанное со сменным параметром конфигурации trx_stickiness. Если, например, Вы хотите знать, вызывает ли определенный вызов API mysqlnd библиотечная функция trx_autocommit(), который является требованием для trx_stickiness, можно подвергнуть сомнению пользовательскую API-функцию и проверить, изменилась ли статистическая величина. Статистическая величина изменяется только плагинами, внутренними разделенный на подклассы trx_autocommit() метод. С тех пор 1.0.0.
trx_autocommit_off Число autocommit дезактивации режима через вызовы API. С тех пор 1.0.0.
trx_master_forced Число операторов, перенаправленных ведущему устройству, в то время как trx_stickiness=master и autocommit режим отключается. С тех пор 1.0.0.
gtid_autocommit_injections_success Число успешных инжекций SQL в режиме автоматической фиксации как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. С тех пор 1.2.0.
gtid_autocommit_injections_failure Число отказавших инжекций SQL в режиме автоматической фиксации как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. С тех пор 1.2.0.
gtid_commit_injections_success Число успешных инжекций SQL в режиме фиксации как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. С тех пор 1.2.0.
gtid_commit_injections_failure Число отказавших инжекций SQL в режиме фиксации как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. С тех пор 1.2.0.
gtid_implicit_commit_injections_success Число успешных инжекций SQL, когда неявная фиксация обнаруживается как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. Неявная фиксация происходит, например, когда автоматическая фиксация была выключена, запрос выполняется, и автоматическая фиксация включается снова. В этом случае оператор будет фиксироваться сервером, и SQL, чтобы поддержать вводится прежде, чем автоматическая фиксация повторно включается. Другая последовательность, вызывающая неявная фиксация, begin(), query(), begin(). Второй звонок begin() будет неявно фиксировать транзакцию, запущенную первым звонком begin(). begin() отсылает к внутренним вызовам библиотеки не фактические пользовательские вызовы API PHP. С тех пор 1.2.0.
gtid_implicit_commit_injections_failure Число отказавших инжекций SQL, когда неявная фиксация обнаруживается как часть клиентской глобальной эмуляции идентификатора транзакции плагинов. Неявная фиксация происходит, например, когда автоматическая фиксация была выключена, запрос выполняется, и автоматическая фиксация включается снова. В этом случае оператор будет фиксироваться сервером, и SQL, чтобы поддержать вводится прежде, чем автоматическая фиксация повторно включается. С тех пор 1.2.0.
transient_error_retries Как часто работа была повторена, когда случайная ошибка была обнаружена. См. также, transient_errorсменная установка конфигурационного файла. С тех пор 1.6.0.

Примеры

Пример 21.302. mysqlnd_ms_get_statsпример

<?phpprintf("mysqlnd_ms.enable = %d\n", ini_get("mysqlnd_ms.enable"));printf("mysqlnd_ms.collect_statistics = %d\n", ini_get("mysqlnd_ms.collect_statistics"));var_dump(mysqlnd_ms_get_stats());?>    

Вышеупомянутый пример выведет:

mysqlnd_ms.enable = 1mysqlnd_ms.collect_statistics = 1array(26) {  ["use_slave"]=>  string(1) "0"  ["use_master"]=>  string(1) "0"  ["use_slave_guess"]=>  string(1) "0"  ["use_master_guess"]=>  string(1) "0"  ["use_slave_sql_hint"]=>  string(1) "0"  ["use_master_sql_hint"]=>  string(1) "0"  ["use_last_used_sql_hint"]=>  string(1) "0"  ["use_slave_callback"]=>  string(1) "0"  ["use_master_callback"]=>  string(1) "0"  ["non_lazy_connections_slave_success"]=>  string(1) "0"  ["non_lazy_connections_slave_failure"]=>  string(1) "0"  ["non_lazy_connections_master_success"]=>  string(1) "0"  ["non_lazy_connections_master_failure"]=>  string(1) "0"  ["lazy_connections_slave_success"]=>  string(1) "0"  ["lazy_connections_slave_failure"]=>  string(1) "0"  ["lazy_connections_master_success"]=>  string(1) "0"  ["lazy_connections_master_failure"]=>  string(1) "0"  ["trx_autocommit_on"]=>  string(1) "0"  ["trx_autocommit_off"]=>  string(1) "0"  ["trx_master_forced"]=>  string(1) "0"  ["gtid_autocommit_injections_success"]=>  string(1) "0"  ["gtid_autocommit_injections_failure"]=>  string(1) "0"  ["gtid_commit_injections_success"]=>  string(1) "0"  ["gtid_commit_injections_failure"]=>  string(1) "0"  ["gtid_implicit_commit_injections_success"]=>  string(1) "0"  ["gtid_implicit_commit_injections_failure"]=>  string(1) "0"  ["transient_error_retries"]=>  string(1) "0"}

См. Также

Конфигурация времени выполнения
mysqlnd_ms.collect_statistics
mysqlnd_ms.enable
Контроль

21.9.6.8.4. mysqlnd_ms_match_wild

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_match_wild

    Находит, соответствует ли имя таблицы подстановочный образец или нет

Описание

bool mysqlnd_ms_match_wild(string table_name,
string wildcard);

Находит, соответствует ли имя таблицы подстановочный образец или нет.

Эта функция не имеет большого количества практической уместности с PECL mysqlnd_ms 1.1.0, потому что плагин не поддерживает таблицу репликации MySQL еще, фильтрующую.

Параметры

table_name

Имя таблицы, чтобы проверить, является ли это соответствующим подстановочным знаком.

wildcard

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

Фильтры репликации MySQL могут быть сконфигурированы при использовании параметров конфигурации MySQL Server --replicate-wild-do-table и --replicate-wild-do-db. Пожалуйста, консультируйтесь с MySQL Reference Manual, чтобы узнать больше об этой функции MySQL Server.

Поддерживаемые заполнители:

  • % - нуль или больше литералов
  • % - один литерал

Заполнителей можно оставить, используя \.

Возвращаемые значения

Возвраты TRUE table_name является соответствующим wildcard. Иначе, возвраты FALSE

Примеры

Пример 21.303. mysqlnd_ms_match_wildпример

<?phpvar_dump(mysqlnd_ms_match_wild("schema_name.table_name", "schema%"));var_dump(mysqlnd_ms_match_wild("abc", "_"));var_dump(mysqlnd_ms_match_wild("table1", "table_"));var_dump(mysqlnd_ms_match_wild("asia_customers", "%customers"));var_dump(mysqlnd_ms_match_wild("funny%table","funny\%table"));var_dump(mysqlnd_ms_match_wild("funnytable", "funny%table"));?>    

Вышеупомянутый пример выведет:

bool(true)bool(false)bool(true)bool(true)bool(true)bool(true)

21.9.6.8.5. mysqlnd_ms_query_is_select

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_query_is_select

    Найдите, отправить ли запрос ведущему устройству, ведомому устройству или последнему используемому серверу MySQL

Описание

int mysqlnd_ms_query_is_select(string query);

Находит, отправить ли запрос ведущему устройству, ведомому устройству или последнему используемому серверу MySQL.

Встроенный механизм разделения чтения-записи плагинов будет использоваться, чтобы проанализировать строку запроса, чтобы сделать рекомендацию, куда отправить запрос. Встроенный механизм разделения чтения-записи является очень основным и простым. Плагин рекомендует отправить все запросы главному серверу репликации MySQL, но тем, которые начинают SELECT, или начните с подсказки SQL, которая осуществляет отправку запроса к ведомому серверу. Из-за основного, но быстрого алгоритма плагин может предложить выполнить некоторые операторы только для чтения такой как SHOW TABLES на ведущем устройстве репликации.

Параметры

query

Строка запроса, чтобы протестировать.

Возвращаемые значения

Возвращаемое значение MYSQLND_MS_QUERY_USE_MASTER указывает, что запрос должен быть, передаются к главному серверу репликации MySQL. Функция возвращает значение MYSQLND_MS_QUERY_USE_SLAVE если запрос может быть выполнен на ведомом устройстве, потому что это считают только для чтения. Значение MYSQLND_MS_QUERY_USE_LAST_USED возвращается, чтобы рекомендовать выполнить запрос на последнем используемом сервере. Это может или быть главным сервером репликации MySQL или ведомым сервером репликации MySQL.

Если разделение записи чтения было отключено, устанавливая mysqlnd_ms.disable_rw_split, функция будет всегда возвращаться MYSQLND_MS_QUERY_USE_MASTER или MYSQLND_MS_QUERY_USE_LAST_USED .

Примеры

Пример 21.304. mysqlnd_ms_query_is_selectпример

<?phpfunction is_select($query){ switch (mysqlnd_ms_query_is_select($query)) {  case MYSQLND_MS_QUERY_USE_MASTER:   printf("'%s' should be run on the master.\n", $query);   break;  case MYSQLND_MS_QUERY_USE_SLAVE:   printf("'%s' should be run on a slave.\n", $query);   break;  case MYSQLND_MS_QUERY_USE_LAST_USED:   printf("'%s' should be run on the server that has run the previous query\n", $query);   break;  default:   printf("No suggestion where to run the '%s', fallback to master recommended\n", $query);   break; }}is_select("INSERT INTO test(id) VALUES (1)");is_select("SELECT 1 FROM DUAL");is_select("/*" . MYSQLND_MS_LAST_USED_SWITCH . "*/SELECT 2 FROM DUAL");?>    

Вышеупомянутый пример выведет:

INSERT INTO test(id) VALUES (1) should be run on the master.SELECT 1 FROM DUAL should be run on a slave./*ms=last_used*/SELECT 2 FROM DUAL should be run on the server that has run the previous query

См. Также

Предопределенные Константы
user фильтр

21.9.6.8.6. mysqlnd_ms_set_qos

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_set_qos

    Устанавливает качество службы, необходимой от кластера

Описание

bool mysqlnd_ms_set_qos(mixed connection,
int service_level,
int service_level_option,
mixed option_value);

Устанавливает качество службы, необходимой от кластера. Кластер базы данных поставляет определенное качество службы пользователю в зависимости от его архитектуры. Главным аспектом качества службы является уровень непротиворечивости, который может предложить кластер. Асинхронный кластер репликации MySQL значения по умолчанию к возможной непротиворечивости для ведомых чтений: ведомое устройство может служить устаревшим данным, текущим данным, или у этого могут быть не запрошенные данные вообще, потому что это не синхронно ведущему устройству. В кластере репликации MySQL только основные доступы могут дать непротиворечивость strong, которая обещает, что все клиенты видят каждого изменения других.

PECL/mysqlnd_ms скрывает сложность выбора соответствующих узлов, чтобы достигнуть определенного уровня службы от кластера. "Качество Службы" фильтр реализует необходимую логику. Фильтр может или быть сконфигурирован в конфигурационном файле плагинов, или при использовании времени выполнения mysqlnd_ms_set_qos.

Подобные результаты могут быть достигнуты с PECL mysqlnd_ms <1.2.0, если использование SQL подсказывают, чтобы вызвать использование определенного типа узла или использование master_on_write сменный параметр конфигурации. Первое требует большего количества кода и вызывает больше работы над стороной приложения. Последний менее усовершенствован чем использование качества фильтра службы. Настройки, сделанные посредством вызова функции, могут быть инвертированы, как показано в примере ниже. Пример временно переключается на более высокий уровень обслуживания (непротиворечивость сеанса, считайте свои записи), и возвращается назад к значению по умолчанию кластеров после того, как это выполнило все операции, которые требуют лучшей службы. Таким образом, читайте, загрузка на ведущем устройстве может быть минимизирована по сравнению с использованием master_on_write, который продолжал бы использовать ведущее устройство после первой записи.

Так как 1.5.0 вызовов перестанут работать когда сделано в середине транзакции, если неподвижность транзакции будет включена, и границы транзакции были обнаружены. должным образом.

Параметры

connection

Соединение PECL/mysqlnd_ms обрабатывает к серверу MySQL типа PDO_MYSQL, mysqli или ext/mysql, для которого должен быть установлен уровень обслуживания. Дескриптор соединения получается, открывая соединение с именем хоста, которое соответствует mysqlnd_ms запись конфигурационного файла, используя любое из вышеупомянутых трех расширений драйвера MySQL.

service_level

Требуемый уровень обслуживания: MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL , MYSQLND_MS_QOS_CONSISTENCY_SESSION или MYSQLND_MS_QOS_CONSISTENCY_STRONG .

service_level_option

Опция, чтобы параметризовать требуемый уровень обслуживания. Опция может или быть MYSQLND_MS_QOS_OPTION_GTID или MYSQLND_MS_QOS_OPTION_AGE .

Опция MYSQLND_MS_QOS_OPTION_GTID может использоваться, чтобы совершенствовать уровень обслуживания MYSQLND_MS_QOS_CONSISTENCY_SESSION . Это должно быть объединено с четвертым параметром функции, option_value. option_value будет глобальный ID транзакции, полученный из mysqlnd_ms_get_last_gtid. Если установлено, плагин рассматривает оба главных сервера, и асинхронные ведомые устройства для непротиворечивости сеанса (считайте свои записи). Иначе, только ведущие устройства используются, чтобы достигнуть непротиворечивости сеанса. Ведомое устройство считают актуальным и проверенным, если оно уже тиражировало глобальный ID транзакции от option_value. Пожалуйста, отметьте, поиск соответствующих ведомых устройств является дорогой и медленной работой. Используйте функцию редко, если ведущее устройство не может обработать одну только загрузку чтения.

MYSQLND_MS_QOS_OPTION_AGE опция может быть объединена с MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL уровень обслуживания, чтобы отфильтровать асинхронные ведомые устройства, которые изолируют больше секунд позади ведущего устройства чем option_value. Если установлено, плагин только рассмотрит ведомые устройства для того, чтобы читать если SHOW SLAVE STATUS отчеты Slave_IO_Running=Yes, Slave_SQL_Running=Yes и Seconds_Behind_Master <= option_value. Пожалуйста, отметьте, поиск соответствующих ведомых устройств является дорогой и медленной работой. Используйте функцию редко в версии 1.2.0. Будущие версии могут улучшить алгоритм, используемый, чтобы идентифицировать кандидатов. Пожалуйста, см. справочник MySQL о точности, точности и ограничениях MySQL административная команда SHOW SLAVE STATUS.

option_value

Значение параметра для опции уровня обслуживания. См. также service_level_option параметр.

Возвращаемые значения

Возвраты TRUE если уровень обслуживания соединений был переключен на требуемый. Иначе, возвраты FALSE

Примечания

Отметить

mysqlnd_ms_set_qos требует PHP> = 5.4.0 и PECL mysqlnd_ms> = 1.2.0. Внутренне, это использует a mysqlnd библиотека C функциональность, не доступная с PHP 5.3.

Примеры

Пример 21.305. mysqlnd_ms_set_qosпример

<?php/* Open mysqlnd_ms connection using mysqli, PDO_MySQL or mysql extension */$mysqli = new mysqli("myapp", "username", "password", "database");if (!$mysqli)  /* Of course, your error handling is nicer... */  die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));/* Session consistency: read your writes */$ret = mysqlnd_ms_set_qos($mysqli, MYSQLND_MS_QOS_CONSISTENCY_SESSION);if (!$ret)  die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));/* Will use master and return fresh data, client can see his last write */if (!$res = $mysqli->query("SELECT item, price FROM orders WHERE order_id = 1"))  die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));/* Back to default: use of all slaves and masters permitted, stale data can happen */if (!mysqlnd_ms_set_qos($mysqli, MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL))  die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));?>

См. Также

mysqlnd_ms_get_last_gtid
Уровень обслуживания и понятие непротиворечивости
Понятие фильтра

21.9.6.8.7. mysqlnd_ms_set_user_pick_server

Copyright 1997-2012 PHP Documentation Group.

  • mysqlnd_ms_set_user_pick_server

    Устанавливает обратный вызов для определяемого пользователем разделения чтения-записи

Описание

bool mysqlnd_ms_set_user_pick_server(string function);

Устанавливает обратный вызов для определяемого пользователем разделения чтения-записи. Плагин вызовет обратный вызов только если pick[]=user правило значения по умолчанию для выбора сервера в соответствующем разделе конфигурационного файла плагинов.

Плагины встроенные решения механизма разделения запроса чтения-записи могут быть перезаписаны двумя способами. Самый легкий путь состоит в том, чтобы предварительно ожидать строку запроса с подсказками SQL MYSQLND_MS_MASTER_SWITCH , MYSQLND_MS_SLAVE_SWITCH или MYSQLND_MS_LAST_USED_SWITCH . Используя подсказки SQL можно управлять, например, должен ли запрос быть, передаются к главному серверу репликации MySQL или одному из ведомых серверов. Справкой подсказок SQL не возможно выбрать определенный ведомый сервер для выполнения запроса.

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

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

Если ленивые соединения будут включены, и обратный вызов выбирает ведомый сервер, для которого никакое соединение до сих пор не устанавливалось и установление соединения с ведомыми сбоями, то плагин возвратит ошибку после следующего действия на отказавшем соединении, например, выполняя запрос. Это - обязанность разработчика приложений обработать ошибку. Например, приложение может запустить повторно запрос, чтобы инициировать новый вызов выбора и обратного вызова сервера. Если так, обратный вызов должен удостовериться, что выбрал различное ведомое устройство, или проверил ведомое наличие, прежде, чем возвратился к плагину, чтобы предотвратить бесконечный цикл.

Параметры

function

Функция, которую вызовут. Методы класса могут также быть вызваны, статически используя эту функцию, передавая array($classname, $methodname) к этому параметру. Дополнительно методы class объектного экземпляра можно вызвать, передавая array($objectinstance, $methodname) к этому параметру.

Возвращаемые значения

Узел, чтобы работать на запросе. URI узла должен быть взят от основных и ведомых списков соединения, которые передают к функции обратного вызова. Если обратный вызов возвратит значение, ни найденное в ведущем устройстве, ни в ведомых списках соединения, то плагин будет нейтрализация к второму методу выбора, сконфигурированному через pick[] установка в сменном конфигурационном файле. Если не второй метод выбора дается, плагин отступает к создаванию - в методе выбора значения по умолчанию для выбора сервера.

Примечания

Отметить

mysqlnd_ms_set_user_pick_server доступно с PECL mysqlnd_ms <1.1.0. Это было заменено user фильтр. Пожалуйста, проверьте Историю изменений на примечания обновления.

Примеры

Пример 21.306. mysqlnd_ms_set_user_pick_serverпример

[myapp]master[] = localhostslave[] = 192.168.2.27:3306slave[] = 192.168.78.136:3306pick[] = user    
<?phpfunction pick_server($connected, $query, $master, $slaves, $last_used){ static $slave_idx = 0; static $num_slaves = NULL; if (is_null($num_slaves))  $num_slaves = count($slaves); /* default: fallback to the plugins build-in logic */ $ret = NULL; printf("User has connected to '%s'...\n", $connected); printf("... deciding where to run '%s'\n", $query); $where = mysqlnd_ms_query_is_select($query); switch ($where) {  case MYSQLND_MS_QUERY_USE_MASTER:   printf("... using master\n");   $ret = $master[0];   break;  case MYSQLND_MS_QUERY_USE_SLAVE:   /* SELECT or SQL hint for using slave */   if (stristr($query, "FROM table_on_slave_a_only"))   {    /* a table which is only on the first configured slave  */    printf("... access to table available only on slave A detected\n");    $ret = $slaves[0];   }   else   {    /* round robin */    printf("... some read-only query for a slave\n");    $ret = $slaves[$slave_idx++ % $num_slaves];   }   break;  case MYSQLND_MS_QUERY_LAST_USED:   printf("... using last used server\n");   $ret = $last_used;   break; } printf("... ret = '%s'\n", $ret); return $ret;}mysqlnd_ms_set_user_pick_server("pick_server");$mysqli = new mysqli("myapp", "root", "root", "test");if (!($res = $mysqli->query("SELECT 1 FROM DUAL"))) printf("[%d] %s\n", $mysqli->errno, $mysqli->error);else $res->close();if (!($res = $mysqli->query("SELECT 2 FROM DUAL"))) printf("[%d] %s\n", $mysqli->errno, $mysqli->error);else $res->close();if (!($res = $mysqli->query("SELECT * FROM table_on_slave_a_only"))) printf("[%d] %s\n", $mysqli->errno, $mysqli->error);else $res->close();$mysqli->close();?>    

Вышеупомянутый пример выведет:

User has connected to 'myapp'...... deciding where to run 'SELECT 1 FROM DUAL'... some read-only query for a slave... ret = 'tcp://192.168.2.27:3306'User has connected to 'myapp'...... deciding where to run 'SELECT 2 FROM DUAL'... some read-only query for a slave... ret = 'tcp://192.168.78.136:3306'User has connected to 'myapp'...... deciding where to run 'SELECT * FROM table_on_slave_a_only'... access to table available only on slave A detected... ret = 'tcp://192.168.2.27:3306'

См. Также

mysqlnd_ms_query_is_select
Понятие фильтра
user фильтр