|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Copyright 1997-2012 PHP Documentation Group.
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 Транзакции |
Copyright 1997-2012 PHP Documentation Group.
mysqlnd_ms_get_last_used_connection
Возвращает массив, который описывает последнее используемое соединение
Описание
array mysqlnd_ms_get_last_used_connection(mixed connection);
Возвращает массив, который описывает последнее используемое соединение от пула соединения плагинов, на который в настоящий момент указывает пользовательский дескриптор соединения. Используя плагин, пользовательский дескриптор соединения представляет пул соединений с базой данных. Не возможно сказать от пользовательских свойств дескрипторов соединения, до которого сервера базы данных от пула указывает пользовательский дескриптор соединения.
Функция может использоваться, чтобы отладить или контролировать PECL mysqlnd_ms.
Параметры
Возвращаемые значения
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"}
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, чтобы
вызвать использование ведомого устройства, ни операторов, направленных к ведомому устройству
определяемым пользователем обратным вызовом, не включаются. Общее количество операторов,
отправленных ведомым устройствам, PECL/mysqlnd_ms 1.1.0 представляет новое понятие цепочечных фильтров. Статистика теперь
устанавливается внутренним фильтром выравнивания нагрузки. С версией 1.1.0 фильтр
выравнивания нагрузки всегда является последним в цепочке фильтра, если использующийся. В
будущих версиях фильтр выравнивания нагрузки может сопровождаться другими фильтрами,
вызывающими другое изменение в значении статистической величины. Если в будущем фильтр
выравнивания нагрузки будет сопровождаться другим фильтром, то больше не гарантируется, что
оператор, который постепенно увеличивается Значение для версии 1.1.0 следующие. Число операторов, отправленных ведомым устройствам.
Операторы, направленные к ведомому устройству пользовательским фильтром (определяемый
пользователем обратный вызов), не включаются. Последние считаются |
С тех пор 1.0.0. |
use_master |
Семантика этой статистической величины изменилась между 1.0.1 - 1.1.0. Значение для версии 1.0.1 следующие. Число операторов, которые не рассматривает как только
для чтения встроенный запрос анализатор. Ни операторы, которые начинаются с подсказки SQL,
чтобы вызвать использование ведущего устройства, ни операторов, направленных к ведущему
устройству определяемым пользователем обратным вызовом, не включаются. Общее количество
операторов, отправленных ведущему устройству, PECL/mysqlnd_ms 1.1.0 представляет новое понятие цепочечных фильтров. statictics теперь
устанавливается внутренним фильтром выравнивания нагрузки. С версией 1.1.0 фильтр
выравнивания нагрузки всегда является последним в цепочке фильтра, если использующийся. В
будущих версиях фильтр выравнивания нагрузки может сопровождаться другими фильтрами,
вызывающими другое изменение в значении статистической величины. Если в будущем фильтр
выравнивания нагрузки будет сопровождаться другим фильтром, то больше не гарантируется, что
оператор, который постепенно увеличивается Значение для версии 1.1.0 следующие. Число операторов, отправленных ведущим устройствам.
Операторы, направленные к ведущему устройству пользовательским фильтром (определяемый
пользователем обратный вызов), не включаются. Последние считаются |
С тех пор 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 |
| Контроль |
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)
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 фильтр
|
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 |
| Уровень обслуживания и понятие непротиворечивости |
| Понятие фильтра |
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 фильтр
|