3.7 MySQL Router Установка трассировки
MySQL Router поддерживает трассировку запросов по мере их обработки MySQL Router от клиента к серверу и ответа клиенту. Трассировка возвращается в формате JSON.
Это позволяет отлаживать, тестировать, сравнивать подключения приложений и т.д.
Настройка
Для настройки ROUTER SET trace необходимо добавить следующее в файл конфигурации MySQL Router:
max_idle_server_connections: добавить в разделDEFAULT. Это значение должно быть не меньше 1.-
Следующие значения можно добавить в раздел
DEFAULT, они применимы ко всем подключениям, или вы можете добавить их в отдельные разделыROUTING: ...подключений, которые вы хотите подробно изучить.client_ssl_mode: Установите значениеPREFERREDилиREQUIRED.server_ssl_mode: Установите значениеPREFERRED,REQUIREDилиDISABLED.connection_sharing: Установите значение 1 для включения совместного использования подключений.
Например:
[DEFAULT]
max_idle_server_connections=64
[routing:{...}]
client_ssl_mode=PREFERRED
server_ssl_mode=PREFERRED
connection_sharing=1
Включение ROUTER TRACE
ROUTER TRACE можно включить для каждой сессии или для каждого запроса в командной строке вашего MySQL клиента.
-
Включить для сессии:
ROUTER SET TRACE = 1;
-
Отключить для сессии:
ROUTER SET TRACE = 0;
-
Включить для запроса:
query_attributes router.trace 1;
-
Отключить для запроса:
query_attributes router.trace 0;
Формат трассировки
Трассировка возвращается в объекте JSON со следующими свойствами:
start_time: Строка даты и времени, обозначающая начало отрезка.end_time: Строка даты и времени, обозначающая конец отрезка.elapsed_in_span_us: Микросекунды, потраченные в текущем отрезке. Это значение равноend_timeминусstart_time.status_code: Представляет собой стандартный код состояния завершенного отрезка. Значение по умолчанию — пустое.name: Имя события.attributes: Атрибуты события.-
events: Массив событий. Они содержат следующее:timestamp: Строка даты и времени.name: Имя события.attributes: Атрибуты события.
Например:
> mysql --host=127.0.0.1 --port=6446 --show-warnings
> ROUTER SET trace = 1;
> SELECT @@port;
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set, 1 warning (0,02 sec)
Note (code 4600): {
"start_time": "2023-03-23T15:31:08.052442Z",
"end_time": "2023-03-23T15:31:08.052653Z",
"elapsed_in_span_us": 211,
"name": "mysql/query",
"attributes": {
"mysql.sharing_blocked": false
},
"events": [
{
"timestamp": "2023-03-23T15:31:08.052444Z",
"name": "mysql/query_classify",
"attributes": {
"mysql.query.classification": "change_on_tracker"
}
},
{
"start_time": "2023-03-23T15:31:08.052455Z",
"end_time": "2023-03-23T15:31:08.052495Z",
"elapsed_in_span_us": 39,
"name": "mysql/connect_and_forward",
"attributes": {
"mysql.remote.is_connected": true,
"mysql.remote.endpoint": "localhost:3306",
"mysql.remote.connection_id": 17,
"db.name": ""
},
"events": [
{
"start_time": "2023-03-23T15:31:08.052458Z",
"end_time": "2023-03-23T15:31:08.052495Z",
"elapsed_in_span_us": 36,
"name": "mysql/forward"
}
]
},
{
"start_time": "2023-03-23T15:31:08.052623Z",
"end_time": "2023-03-23T15:31:08.052627Z",
"elapsed_in_span_us": 3,
"name": "mysql/response",
"attributes": {
"mysql.session.@@SESSION.statement_id": "84"
}
}
]
}
События трассировки
Поддерживаются следующие события трассировки и атрибуты:
-
mysql/query -
MySQL Router получает запрос.
Атрибуты:
mysql.sharing_blocked: Булево значение. Если общий доступ к соединениям заблокирован, отображаетсяmysql.sharing_blocked_byвместе с причиной блокировки общего доступа.-
mysql.sharing_blocked_by: Строка. Отображает причину блокировки общего доступа к соединениям. Это может быть одно из следующих значений:trx-state: Активна транзакция.trx-characteristics: Установлено состояние транзакции. Например,SET TRANSACTION READ ONLY.some-state-changed: Сеанс находится в невосстановимом состоянии.session-track-gtids: не содержит ожидаемого значения.session-track-state-change: не содержит ожидаемого значения.session-track-transaction-info: не содержит ожидаемого значения.
-
mysql/query_classify -
Описывает, как MySQL Router проанализировал инструкцию в контексте общего доступа к соединениям.
Атрибуты:
-
mysql.query.classification: Список, разделенный запятыми, из нуля или более следующих элементов:accept_session_state_from_session_tracker: Инструкция привела к уведомлению от средства отслеживания сеансов, которое было принято как есть.ignore_session_tracker_some_state_changed: Инструкция привела к уведомлению от средства отслеживания сеансов, которое было проигнорировано.session_not_sharable_on_error: Инструкции, такие какSET known_variable = 1, unknown_variable = 2, могут вызывать изменение состояния сеанса, даже если инструкция завершилась ошибкой. Сервер отвечает ошибкой, но не средством отслеживания сеансов, несмотря на изменение состояния сеанса.session_not_sharable_on_success: Устанавливается, если инструкция изменяет состояние сеанса, но средство отслеживания сеансов не сообщает об этом.forbidden_function_with_connection_sharing: Инструкция содержит функции или ключевые слова, которые невозможны при общем доступе к соединениям. Например, или .forbidden_set_with_connection_sharing: Инструкция пыталась установить информацию средства отслеживания сеансов, необходимую для общего доступа к соединениям.
-
-
mysql/connect_and_forward -
Атрибуты:
-
mysql.remote.is_connected: Булево значение. Еслиfale, соединения нет. Еслиtrue, возвращаются следующие значения:mysql.remote.endpoint: Имя конечной точки подключения к серверу.mysql.remote.connection_id: Идентификатор соединения конечной точки подключения к серверу.db.name: Имя схемы.
-
-
mysql/from_pool_or_connect -
Атрибуты:
mysql.remote.candidates: Список конечных точек, разделенных запятыми.net.peer.name: Имя узла конечной точки, к которой это соединение подключалось в своем предыдущем сеансе.net.peer.port: Порт конечной точки, к которой это соединение подключалось в своем предыдущем сеансе.
-
mysql/from_pool -
Атрибуты:
mysql.error_message: Отображается, еслиstatus_codeравноERROR.mysql.remote.connection_id: Идентификатор соединения конечной точки подключения к серверу.
-
mysql/connect -
Атрибуты:
net.peer.name: Имя узла конечной точки.net.peer.port: Порт конечной точки.
-
mysql/authenticate -
Атрибуты:
-
mysql.remote.needs_full_authentication: Булево значение. Если требуется полное рукопожатие (true) или если возможно быстрое сброс соединения (false).Если
true, за которым следуетmysql/change_user. Еслиfalse, за которым следуетmysql/reset_connected.
-
-
mysql/server_greeting -
Атрибуты:
mysql.remote.connection_id: Идентификатор соединения конечной точки подключения к серверу.
-
mysql/client_greeting -
Атрибуты:
db.name: Имя схемы.
-
mysql/tls_connect -
Атрибуты:
tls.version: Используемая версия TLS.tls.cipher: Шифр TLS, используемый для соединения.tls.session_resused: Булево значение.True, если сеанс TLS был повторно использован.
-
mysql/response -
Атрибуты:
mysql.session.@@SESSION.*: Измененные переменные сеанса в соответствии со средством отслеживания сеансов сервера.mysql.session.transaction_state: Список состояний транзакций, разделенный запятыми.mysql.session.transaction_characteristics: Инструкция, необходимая для восстановления состояния транзакции.
-
mysql/set_var -
Атрибуты:
mysql.session.@@SESSION.*: Переменные сеанса, восстановленные после повторного подключения.
Следующие события имеют те же атрибуты, что и mysql/query:
mysql/pingmysql/stmt_preparemysql/stmt_executemysql/killmysql/statisticsmysql/set_optionmysql/reloadmysql/list_fields
Следующие события не имеют атрибутов:
mysql/prepare_server_connection:mysql/reset_connection:mysql/greeting:mysql/forward:
Примеры трассировки
Простая переадресация запроса
В следующем примере показана трассировка простой переадресации запроса:
MySQL Router получает запрос.
MySQL Router пересылает запрос на сервер.
MySQL Router ожидает результат.
MySQL Router пересылает результат клиенту.
$ mysql --host=127.0.0.1 --port=6446 --show-warnings
> ROUTER SET trace = 1;
> SELECT @@port;
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set, 1 warning (0,02 sec)
Note (code 4600): {
"start_time": "2023-03-23T15:31:08.052442Z",
"end_time": "2023-03-23T15:31:08.052653Z",
"elapsed_in_span_us": 211,
"name": "mysql/query",
"attributes": {
"mysql.sharing_blocked": false
},
"events": [
{
"timestamp": "2023-03-23T15:31:08.052444Z",
"name": "mysql/query_classify",
"attributes": {
"mysql.query.classification": "accept_session_state_from_session_tracker"
}
},
{
"start_time": "2023-03-23T15:31:08.052455Z",
"end_time": "2023-03-23T15:31:08.052495Z",
"elapsed_in_span_us": 39,
"name": "mysql/connect_and_forward",
"attributes": {
"mysql.remote.is_connected": true,
"mysql.remote.endpoint": "localhost:3306",
"mysql.remote.connection_id": 17,
"db.name": ""
},
"events": [
{
"start_time": "2023-03-23T15:31:08.052458Z",
"end_time": "2023-03-23T15:31:08.052495Z",
"elapsed_in_span_us": 36,
"name": "mysql/forward"
}
]
},
{
"start_time": "2023-03-23T15:31:08.052623Z",
"end_time": "2023-03-23T15:31:08.052627Z",
"elapsed_in_span_us": 3,
"name": "mysql/response",
"attributes": {
"mysql.session.@@SESSION.statement_id": "84"
}
}
]
}
© 2025 Oracle
Licensed under the GPLv2 License.