Spec-Zone .ru
спецификации, руководства, описания, API
|
Есть много внутренних структур в пределах элемента сценариев MySQL Proxy. Основная структура proxy
и это обеспечивает интерфейс для многих общих структур, используемых всюду по
сценарию, таких как списки соединения и сконфигурированные серверы бэкэнда. Другие структуры, такие как входящий
пакет от клиента и наборов результатов только доступны в пределах контекста одной из функций scriptable.
Следующая таблица описывает общие атрибуты MySQL proxy
сценарии элемента.
Атрибут | Описание |
---|---|
connection |
Структура, содержащая активные клиентские соединения. Для списка атрибутов см. proxy.connection .
|
servers |
Структура, содержащая список сконфигурированных серверов бэкэнда. Для списка атрибутов см. proxy.global.backends .
|
queries |
Структура, содержащая очередь запросов, которые будут отправлены серверу во время единственного
клиентского запроса. Для списка атрибутов см. proxy.queries .
|
PROXY_VERSION |
Номер версии MySQL Proxy, закодированного в шестнадцатеричном. Можно использовать это, чтобы
проверить, что номер версии поддерживает определенную опцию изнутри сценария Lua. Отметьте, что
значение кодируется как шестнадцатеричное значение, так проверить, что версия - по крайней мере
0.5.1, Вы сравниваетесь с0x00501 .
|
proxy.connection
объект только для чтения, и предоставляет информацию о текущем
соединении, и разделяется на a client
и server
таблицы. Это позволяет Вам исследовать информацию об обоих входящие клиентские соединения с прокси (client
), и к серверам бэкэнда (server
).
Следующая таблица описывает атрибуты клиента и сервера proxy.connection
объект.
Атрибут | Описание |
---|---|
client.default_db |
Базу данных значения по умолчанию требует клиент |
client.username |
Имя пользователя, используемое, чтобы аутентифицировать |
client.scrambled_password |
Скремблированная версия пароля, используемого, чтобы аутентифицировать |
client.dst.name |
Объединенное address:port из порта Прокси, используемого этим клиентом
(должен соответствовать --proxy-address параметр конфигурации)
|
client.dst.address |
IP-адрес порта Прокси используется этим клиентом |
client.dst.port |
Номер порта порта Прокси используется этим клиентом |
client.src.name |
Объединенное address:port из клиента (инициирующая) конечная точка
TCP/IP
|
client.src.address |
IP-адрес клиента (инициирующий) порт TCP/IP |
client.src.port |
Порт клиента (инициирующая) конечная точка TCP/IP |
server.scramble_buffer |
Буфер скремблирования, используемый, чтобы скремблировать пароль |
server.mysqld_version |
Номер версии MySQL сервера |
server.thread_id |
ID потока, обрабатывающего соединение с текущим сервером |
server.dst.name |
Объединенное address:port для сервера бэкэнда для текущего соединения
(то есть соединения с сервером MySQL)
|
server.dst.address |
Адрес для сервера бэкэнда |
server.dst.port |
Порт для сервера бэкэнда |
server.src.name |
Объединенное address:port для конечной точки TCP/IP, используемой
Прокси, чтобы соединиться с сервером бэкэнда
|
server.src.address |
Адрес конечной точки для соединения стороны прокси с сервером MySQL |
server.src.port |
Порт конечной точки для соединения стороны прокси с MySQLserver |
proxy.global.backends
таблица частично перезаписываема и содержит массив всех
сконфигурированных серверов бэкэнда и метаданных сервера (IP-адрес, состояние, и т.д.). Можно решить, что массив
индексирует текущего использования соединения proxy.connection["backend_ndx"]
который является индексированием в эту
таблицу сервера бэкэнда, используемого активным соединением.
Атрибуты для каждой записи в пределах proxy.global.backends
таблицу показывают в
следующей таблице.
Атрибут | Описание |
---|---|
dst.name |
Объединенное address:port из сервера бэкэнда. |
dst.address |
IP-адрес сервера бэкэнда. |
dst.port |
Порт сервера бэкэнда. |
connected_clients |
Число клиентов в настоящий момент соединялось. |
state |
Состояние сервера бэкэнда. См. Константы государства/Типа Бэкэнда. |
type |
Тип сервера бэкэнда. Можно использовать это, чтобы идентифицировать, был ли поддержанный
сконфигурирован как стандартный бэкэнд чтения-записи, или бэкэнд только для чтения. Можно сравнить
это значение с proxy.BACKEND_TYPE_RW иproxy.BACKEND_TYPE_RO .
|
proxy.queries
объект является очередью, представляющей список запросов, которые
будут отправлены серверу. Очередь не заполняется автоматически, но если Вы явно не заполняете очередь, запросы
передаются серверу бэкэнда дословно. Кроме того, если Вы не заполняете очередь запроса вручную, read_query_result()
функция не инициирована.
Следующие функции поддерживаются для того, чтобы заполнить proxy.queries
объект.
Функция | Описание |
---|---|
append(id,packet,[options]) |
Добавляет запрос до конца очереди запроса. id целочисленный
идентификатор, который можно использовать, чтобы распознать результаты запроса, когда они
возвращаются сервером. Пакет должен быть должным образом отформатированным пакетом запроса.
Дополнительное options должна быть таблица, содержащая опции,
определенные для этого пакета.
|
prepend(id,packet) |
Предварительно ожидает запрос очереди запроса. id идентификатор,
который можно использовать, чтобы распознать результаты запроса, когда они возвращаются сервером.
packetshould быть должным образом отформатированным пакетом запроса.
|
reset() |
Освобождает очередь запроса. |
len() |
Возвращает число пакетов запроса в очереди. |
Например, Вы могли добавить пакет запроса к proxy.queries
очередь при использовании
append()
:
proxy.queries:append(1,packet)
Дополнительный третий параметр append()
должен содержать опции для пакета. Иметь
доступ к набору результатов через read_query_result()
функция, набор resultset_is_needed
флаг к true
:
proxy.queries:append( 1, packet, { resultset_is_needed = true } )
Если тот флаг false
(значение по умолчанию), прокси будет:
Отправьте набор результатов клиенту, как только он получается
Уменьшите использование памяти (потому что набор результатов не сохранен внутренне для того, чтобы обработать),
Уменьшите задержку возврата результатов клиенту
Данные передачи от сервера до неизменного клиента
Режим по умолчанию поэтому более быстр и полезен, если Вы только хотите контролировать запросы, отправленные, и основная статистика.
Чтобы выполнить любой вид манипулирования на возвращенных данных, следует установить флаг в true
, который будет:
Сохраните набор результатов так, чтобы он мог быть обработан.
Включите модификации набора результатов прежде, чем это будет возвращено клиенту.
Позвольте Вам отбросить набор результатов вместо того, чтобы возвратить это клиенту.
proxy.response
структура используется, когда Вы хотите возвратить свой собственный
ответ MySQL, вместо того, чтобы передать пакет, что Вы получили сервер бэкэнда. Структура содержит информацию о
типе ответа, дополнительное сообщение об ошибке, и набор результатов (строки/столбцы), чтобы возвратиться.
Следующая таблица описывает атрибуты proxy.response
структура.
Атрибут | Описание |
---|---|
type |
Тип ответа. Тип должен быть также MYSQLD_PACKET_OK или MYSQLD_PACKET_ERR . Если MYSQLD_PACKET_ERR ,
следует установить значение mysql.response.errmsg с подходящим
сообщением об ошибке.
|
errmsg |
Строка, содержащая сообщение об ошибке, которое будет возвращено клиенту. |
resultset |
Структура, содержащая информацию о наборе результатов (столбцы и строки), идентичный тому, что было
бы возвращено, возвращаясь следствия a SELECT запрос.
|
При использовании proxy.response
Вы любой набор proxy.response.type
к proxy.MYSQLD_PACKET_OK
и затем создайте resultset
содержать результаты возвратить, или установить proxy.response.type
к proxy.MYSQLD_PACKET_ERR
и набор proxy.response.errmsg
к строке с сообщением об ошибке. Чтобы отправить
завершенный набор результатов или сообщение об ошибке, следует возвратиться proxy.PROXY_SEND_RESULT
инициировать возврат информации о пакете.
Пример этого может быть замечен в tutorial-resultset.lua
сценарий в пределах
пакета MySQL Proxy:
if string.lower(command) == "show" and string.lower(option) == "querycounter" then --- -- proxy.PROXY_SEND_RESULT requires -- -- proxy.response.type to be either -- * proxy.MYSQLD_PACKET_OK or -- * proxy.MYSQLD_PACKET_ERR -- -- for proxy.MYSQLD_PACKET_OK you need a resultset -- * fields -- * rows -- -- for proxy.MYSQLD_PACKET_ERR -- * errmsg proxy.response.type = proxy.MYSQLD_PACKET_OK proxy.response.resultset = { fields = { { type = proxy.MYSQL_TYPE_LONG, name = "global_query_counter", }, { type = proxy.MYSQL_TYPE_LONG, name = "query_counter", }, }, rows = { { proxy.global.query_counter, query_counter } } } -- we have our result, send it back return proxy.PROXY_SEND_RESULTelseif string.lower(command) == "show" and string.lower(option) == "myerror" then proxy.response.type = proxy.MYSQLD_PACKET_ERR proxy.response.errmsg = "my first error" return proxy.PROXY_SEND_RESULT
proxy.response.resultset
структура должна быть заполнена со строками и столбцами
данных, чтобы возвратиться. Структура содержит информацию обо всем наборе результатов с отдельными элементами
данных, показанных в следующей таблице.
Следующая таблица описывает атрибуты proxy.response.resultset
структура.
Атрибут | Описание |
---|---|
fields |
Определение возвращаемых столбцов. Это должно быть структурой словаря с type определение типа данных MySQL, и name
определение имени столбца. Столбцы должны быть перечислены в порядке данных столбца, которые будут
возвращены.
|
flags |
Много флагов, связанных с набором результатов. Допустимые флаги включают auto_commit
(была ли автоматическая фиксация инициирована), no_good_index_used
(запрос, выполняемый, не используя соответствующее, индексирует), и no_index_used
(запрос, выполняемый, не используя никого, индексирует).
|
rows |
Фактические данные строки. Информация должна быть возвращена как массив массивов. Каждый внутренний массив должен содержать данные столбца с внешним массивом, составляющим весь набор результатов. |
warning_count |
Число предупреждений для этого набора результатов. |
affected_rows |
На число строк влияет исходный оператор. |
insert_id |
Последний ID вставки для автопостепенно увеличенного столбца в таблице. |
query_status |
Состояние работы запроса. Можно использовать MYSQLD_PACKET_OK или MYSQLD_PACKET_ERR константы topopulate этот параметр.
|
Для примера, показывающего, как использовать эту структуру, см. proxy.response
.
Константы государства Возврата прокси
Следующие константы используются внутренне прокси, чтобы определить ответ, чтобы передаться клиенту или серверу.
Все константы представляются как значения в пределах основного proxy
таблица.
Постоянный | Описание |
---|---|
PROXY_SEND_QUERY |
Заставляет прокси отправлять текущее содержание очереди запросов к серверу. |
PROXY_SEND_RESULT |
Заставляет прокси отсылать набор результатов назад к клиенту. |
PROXY_IGNORE_RESULT |
Заставляет прокси отбрасывать набор результатов (ничто не возвращается к theclient). |
Как константы, эти объекты доступны без квалификации в сценариях Lua. Например, в конце read_query_result()
Вы могли бы возвратиться PROXY_IGNORE_RESULT:
return proxy.PROXY_IGNORE_RESULT
Пакетные Константы государства
Следующие состояния описывают состояние сетевого пакета. Эти элементы являются записями в пределах основного
proxy
таблица.
Постоянный | Описание |
---|---|
MYSQLD_PACKET_OK |
Пакет в порядке |
MYSQLD_PACKET_ERR |
Пакет содержит информацию об ошибке |
MYSQLD_PACKET_RAW |
Пакет содержит необработанные данные |
Константы государства/Типа бэкэнда
Следующие константы используются или чтобы определить состояние или тип сервера MySQL бэкэнда, с которым
соединяется прокси. Эти элементы являются записями в пределах основного proxy
таблица.
Постоянный | Описание |
---|---|
BACKEND_STATE_UNKNOWN |
Текущий статус неизвестен |
BACKEND_STATE_UP |
Бэкэнд, как известно, произошел (доступный) |
BACKEND_STATE_DOWN |
Бэкэнд, как известно, снижается (недоступный) |
BACKEND_TYPE_UNKNOWN |
Тип бэкэнда неизвестен |
BACKEND_TYPE_RW |
Бэкэнд доступен для чтения-записи |
BACKEND_TYPE_RO |
Бэкэнд доступен только для использования только для чтения |
Значения, описанные в таблице ниже, используются в пакетах, которыми обмениваются между клиентом и сервером,
чтобы идентифицировать информацию в остальной части пакета. Эти элементы являются записями в пределах основного
proxy
таблица. Пакетный тип определяется как первый символ в отправленном пакете.
Например, прерывая пакеты от клиента, чтобы отредактировать или контролировать запрос, Вы проверили бы, что
первый байт пакета имел тип proxy.COM_QUERY
.
Постоянный | Описание |
---|---|
COM_SLEEP |
Сон |
COM_QUIT |
Выход |
COM_INIT_DB |
Инициализируйте базу данных |
COM_QUERY |
Запрос |
COM_FIELD_LIST |
Cписок полей |
COM_CREATE_DB |
Создайте базу данных |
COM_DROP_DB |
База данных отбрасывания |
COM_REFRESH |
Обновление |
COM_SHUTDOWN |
Завершение работы |
COM_STATISTICS |
Статистика |
COM_PROCESS_INFO |
Список процессов |
COM_CONNECT |
Соединиться |
COM_PROCESS_KILL |
Уничтожить |
COM_DEBUG |
Отладка |
COM_PING |
Ping |
COM_TIME |
Время |
COM_DELAYED_INSERT |
Задержанный вставляют |
COM_CHANGE_USER |
Пользователь изменения |
COM_BINLOG_DUMP |
Дамп Binlog |
COM_TABLE_DUMP |
Табличный дамп |
COM_CONNECT_OUT |
Соединитесь |
COM_REGISTER_SLAVE |
Ведомое устройство регистра |
COM_STMT_PREPARE |
Подготовьте серверный оператор |
COM_STMT_EXECUTE |
Выполните серверный оператор |
COM_STMT_SEND_LONG_DATA |
Длинные данные |
COM_STMT_CLOSE |
Близкий серверный оператор |
COM_STMT_RESET |
Оператор сброса |
COM_SET_OPTION |
Опция набора |
COM_STMT_FETCH |
Оператор выборки |
COM_DAEMON |
Демон (MySQL 5.1 только) |
COM_ERROR |
Ошибка |
Эти константы используются, чтобы идентифицировать типы поля в данных результата запроса, возвращенных клиентам
от результата запроса. Эти элементы являются записями в пределах основного proxy
таблица.
Постоянный | Тип поля |
---|---|
MYSQL_TYPE_DECIMAL |
Десятичное число |
MYSQL_TYPE_NEWDECIMAL |
Десятичное число (MySQL 5.0 или позже) |
MYSQL_TYPE_TINY |
Крошечный |
MYSQL_TYPE_SHORT |
Короткий |
MYSQL_TYPE_LONG |
Долго |
MYSQL_TYPE_FLOAT |
Плавание |
MYSQL_TYPE_DOUBLE |
Двойной |
MYSQL_TYPE_NULL |
Нуль |
MYSQL_TYPE_TIMESTAMP |
Метка времени |
MYSQL_TYPE_LONGLONG |
Долго долго |
MYSQL_TYPE_INT24 |
Целое число |
MYSQL_TYPE_DATE |
Дата |
MYSQL_TYPE_TIME |
Время |
MYSQL_TYPE_DATETIME |
Datetime |
MYSQL_TYPE_YEAR |
Год |
MYSQL_TYPE_NEWDATE |
Дата (MySQL 5.0 или позже) |
MYSQL_TYPE_ENUM |
Перечисление |
MYSQL_TYPE_SET |
Набор |
MYSQL_TYPE_TINY_BLOB |
Крошечный Блоб |
MYSQL_TYPE_MEDIUM_BLOB |
Средний Блоб |
MYSQL_TYPE_LONG_BLOB |
Длинный Блоб |
MYSQL_TYPE_BLOB |
Блоб |
MYSQL_TYPE_VAR_STRING |
Varstring |
MYSQL_TYPE_STRING |
Строка |
MYSQL_TYPE_TINY |
Крошечный (совместимый с MYSQL_TYPE_CHAR) |
MYSQL_TYPE_ENUM |
Перечисление (совместимый с MYSQL_TYPE_INTERVAL ) |
MYSQL_TYPE_GEOMETRY |
Геометрия |
MYSQL_TYPE_BIT |
Бит |