Spec-Zone.ru › MySQL 5.7

5.4.3 Общий журнал запросов

Общий журнал запросов — это общий протокол действий mysqld. Сервер записывает в этот журнал информацию о подключении и отключении клиентов, а также каждый SQL-запрос, полученный от клиентов. Общий журнал запросов может быть очень полезен, когда вы подозреваете ошибку в клиенте и хотите точно знать, что клиент отправил серверу mysqld.

Каждая строка, показывающая подключение клиента, также включает using connection_type для указания протокола, используемого для установления подключения. connection_type является одним из TCP/IP (установлено TCP/IP-соединение без SSL), SSL/TLS (установлено TCP/IP-соединение с SSL), Socket (соединение по Unix-сокету), Named Pipe (соединение по именованной пайпе Windows) или Shared Memory (соединение по общей памяти Windows).

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

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

Однако при использовании журналирования строк, обновления отправляются как изменения строк, а не как SQL-запросы, и поэтому эти запросы никогда не записываются в журнал запросов, когда binlog_format имеет значение ROW. Данное обновление также может не быть записано в журнал запросов, когда эта переменная установлена в MIXED, в зависимости от используемого запроса. Дополнительную информацию см. в Разделе 16.2.1.1 «Преимущества и недостатки репликации на основе запросов и строк».

По умолчанию общий журнал запросов отключен. Чтобы явно указать начальное состояние общего журнала запросов, используйте --general_log[={0|1}]. Без аргумента или с аргументом 1, --general_log включает журнал. С аргументом 0 этот параметр отключает журнал. Чтобы указать имя файла журнала, используйте --general_log_file=file_name. Чтобы указать место назначения журнала, используйте системную переменную log_output (как описано в Разделе 5.4.1 «Выбор мест назначения общего журнала запросов и журнала медленных запросов»).

Примечание

Если вы укажете место назначения журнала TABLE, см. Журнальные таблицы и ошибки «слишком много открытых файлов».

Если вы не укажете имя файла общего журнала запросов, по умолчанию оно будет host_name.log. Сервер создает файл в каталоге данных, если не указан абсолютный путь для задания другого каталога.

Чтобы отключить или включить общий журнал запросов или изменить имя файла журнала во время работы, используйте глобальные системные переменные general_log и general_log_file. Установите general_log в 0 (или OFF) для отключения журнала или в 1 (или ON) для включения. Установите general_log_file для задания имени файла журнала. Если файл журнала уже открыт, он закрывается, и открывается новый файл.

Когда общий журнал запросов включен, сервер записывает вывод в любое место, указанное системной переменной log_output. Если вы включите журнал, сервер откроет файл журнала и запишет в него сообщения о запуске. Однако дальнейшая запись запросов в файл не произойдет, пока не будет выбрано место назначения журнала FILE. Если место назначения — NONE, сервер не будет записывать запросы, даже если общий журнал включен. Установка имени файла журнала не повлияет на запись, если значение места назначения журнала не содержит FILE.

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

$> mv host_name.log host_name-old.log
$> mysqladmin flush-logs general
$> mv host_name-old.log backup-directory

В Windows используйте rename вместо mv.

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

SET GLOBAL general_log = 'OFF';

После отключения журнала переименуйте файл журнала внешним способом (например, из командной строки). Затем снова включите журнал:

SET GLOBAL general_log = 'ON';

Этот метод работает на любой платформе и не требует перезапуска сервера.

Для отключения или включения ведения общего журнала запросов для текущей сессии установите системную переменную сессии sql_log_off в значение ON или OFF. (Предполагается, что сам общий журнал запросов включен.)

Пароли в запросах, записанных в общий журнал запросов, перезаписываются сервером, чтобы они не отображались в открытом тексте. Перезапись паролей для общего журнала запросов может быть подавлена при запуске сервера с опцией --log-raw. Эта опция может быть полезна для диагностических целей, чтобы увидеть точный текст запросов, полученных сервером, но по соображениям безопасности не рекомендуется для использования в рабочей среде. См. также Раздел 6.1.2.3 «Пароли и регистрация».

Следствием перезаписи паролей является то, что запросы, которые невозможно разобрать (например, из-за синтаксических ошибок), не записываются в общий журнал запросов, потому что нельзя знать, что они не содержат паролей. Случаи, требующие ведения журнала всех запросов, включая те, которые содержат ошибки, должны использовать опцию --log-raw, помня о том, что она также обходит перезапись паролей.

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

CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD 'not-so-secret';

Системная переменная log_timestamps управляет часовым поясом временных меток в сообщениях, записываемых в файл общего журнала запросов (а также в файл журнала медленных запросов и журнал ошибок). Она не влияет на часовой пояс сообщений общего журнала запросов и журнала медленных запросов, записанных в журнальные таблицы, но строки, извлеченные из этих таблиц, могут быть преобразованы из местного часового пояса системы в любой желаемый часовой пояс с помощью CONVERT_TZ() или путем установки системной переменной сессии time_zone.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/query-log.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API