5.4.3 Общий журнал запросов
Общий журнал запросов — это общий протокол действий mysqld. Сервер записывает в этот журнал информацию о подключении и отключении клиентов, а также каждый SQL-запрос, полученный от клиентов. Общий журнал запросов может быть очень полезен, когда вы подозреваете ошибку в клиенте и хотите точно знать, что клиент отправил серверу mysqld.
Каждая строка, показывающая подключение клиента, также включает using
для указания протокола, используемого для установления подключения. connection_typeconnection_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_namelog_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.