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

15.7.4.2. Внутренние Структуры

Есть много внутренних структур в пределах элемента сценариев 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

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

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

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

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 структура должна быть заполнена со строками и столбцами данных, чтобы возвратиться. Структура содержит информацию обо всем наборе результатов с отдельными элементами данных, показанных в следующей таблице.

Следующая таблица описывает атрибуты 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 Ошибка

MySQL Type Constants

Эти константы используются, чтобы идентифицировать типы поля в данных результата запроса, возвращенных клиентам от результата запроса. Эти элементы являются записями в пределах основного 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 Бит