Spec-Zone.ru › MySQL 8.4

7.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, в зависимости от используемого запроса. Более подробную информацию см. в разделе 19.2.1.1, «Преимущества и недостатки репликации на основе запросов и на основе строк».

По умолчанию общий журнал запросов отключен. Чтобы явно указать начальное состояние общего журнала запросов, используйте --general_log[={0|1}]. Без аргумента или с аргументом 1, --general_log включает журнал. С аргументом 0 этот параметр отключает журнал. Чтобы указать имя файла журнала, используйте --general_log_file=file_name. Чтобы указать место назначения журнала, используйте системную переменную log_output (как описано в разделе 7.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. Этот параметр может быть полезен в диагностических целях, чтобы увидеть точный текст запросов, полученных сервером, но по соображениям безопасности не рекомендуется для использования в производственных средах. См. также раздел 8.1.2.3, «Пароли и регистрация».

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

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

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

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

Spec-Zone.ru

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