Spec-Zone.ru › MySQL 8.4

6.5.1.3 Ведение журнала клиента mysql

Клиент mysql может выполнять такие типы ведения журнала для команд, выполняемых интерактивно:

  • В Unix, mysql записывает команды в файл истории. По умолчанию этот файл называется .mysql_history в вашем домашнем каталоге. Чтобы указать другой файл, задайте значение переменной среды MYSQL_HISTFILE.

  • На всех платформах, если задан параметр --syslog, mysql записывает команды в систему ведения журналов. В Unix это syslog; в Windows — это журнал событий Windows. Место назначения, где появляются записанные сообщения, зависит от системы. В Linux место назначения часто является файлом /var/log/messages.

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

  • Как происходит ведение журнала

  • Управление файлом истории

  • Характеристики ведения журнала syslog

Как происходит ведение журнала

Для каждого включённого места назначения ведения журнала, ведение журнала команд происходит следующим образом:

  • Команды записываются в журнал только при интерактивном выполнении. Команды неинтерактивны, например, при чтении из файла или из канала. Также возможно подавить ведение журнала команд, используя параметр --batch или --execute.

  • Команды игнорируются и не записываются в журнал, если они соответствуют любому шаблону в списке “ignore”. Этот список описан позже.

  • mysql записывает каждую неигнорируемую, непустую строку команды индивидуально.

  • Если неигнорируемая команда занимает несколько строк (не считая разделителя завершения), mysql конкатенирует строки, чтобы сформировать полную команду, преобразует символы новой строки в пробелы и записывает результат вместе с разделителем.

Следовательно, входная команда, занимающая несколько строк, может быть записана в журнал дважды. Рассмотрим такой ввод:

mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;

В этом случае, mysql записывает строки “SELECT”, “'Today is'”, “,”, “CURDATE()” и “;” по мере их чтения. Он также записывает полную команду после преобразования SELECT\n'Today is'\n,\nCURDATE() в SELECT 'Today is' , CURDATE(), плюс разделитель. Таким образом, эти строки появятся в выводе журнала:

SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();

mysql игнорирует для целей ведения журнала команды, соответствующие любому шаблону в списке “ignore”. По умолчанию список шаблонов — "*IDENTIFIED*:*PASSWORD*", чтобы игнорировать команды, которые ссылаются на пароли. Сопоставление шаблонов нечувствительно к регистру. В шаблонах два символа являются специальными:

  • ? соответствует любому одиночному символу.

  • * соответствует любой последовательности нуля или более символов.

Для указания дополнительных шаблонов используйте параметр --histignore или задайте переменную среды MYSQL_HISTIGNORE. (Если оба указаны, значение параметра имеет приоритет.) Значение должно быть списком одного или более шаблонов, разделенных двоеточием, которые добавляются к списку шаблонов по умолчанию.

Шаблоны, указанные в командной строке, могут потребовать кавычек или экранирования, чтобы предотвратить их специальную обработку интерпретатором команд. Например, чтобы подавить ведение журнала команд UPDATE и DELETE в дополнение к командам, которые ссылаются на пароли, вызовите mysql так:

mysql --histignore="*UPDATE*:*DELETE*"
Управление файлом истории

Файл .mysql_history должен быть защищён с ограниченным режимом доступа, так как в него может быть записана конфиденциальная информация, например, текст SQL-команд, содержащих пароли. См. Раздел 8.1.2.1, “Руководство для конечных пользователей по защите паролей”. Команды в файле доступны из клиента mysql при использовании клавиши стрелка вверх для вызова истории. См. Отключение интерактивной истории.

Если вы не хотите поддерживать файл истории, сначала удалите .mysql_history, если он существует. Затем используйте любой из следующих методов, чтобы предотвратить его повторное создание:

  • Задайте переменную среды MYSQL_HISTFILE на значение /dev/null. Чтобы это значение применялось каждый раз при входе в систему, поместите его в один из файлов запуска вашей оболочки.

  • Создайте .mysql_history как символическую ссылку на /dev/null; это нужно сделать только один раз:

    ln -s /dev/null $HOME/.mysql_history
    
Характеристики ведения журнала syslog

Если задан параметр --syslog, mysql записывает интерактивные команды в систему ведения журналов. Ведение журнала сообщений имеет следующие характеристики.

Ведение журнала происходит на уровне “информация”. Это соответствует приоритету LOG_INFO для syslog в Unix/Linux syslog и EVENTLOG_INFORMATION_TYPE для журнала событий Windows. Обратитесь к документации вашей системы для настройки вашей возможности ведения журнала.

Размер сообщения ограничен 1024 байтами.

Сообщения состоят из идентификатора MysqlClient, за которым следуют эти значения:

  • SYSTEM_USER

    Имя пользователя операционной системы (имя входа) или --, если пользователь неизвестен.

  • MYSQL_USER

    Имя пользователя MySQL (указанное с помощью параметра --user) или --, если пользователь неизвестен.

  • CONNECTION_ID:

    Идентификатор подключения клиента. Это то же самое, что и значение функции CONNECTION_ID() в сессии.

  • DB_SERVER

    Хост сервера или --, если хост неизвестен.

  • DB

    База данных по умолчанию или --, если база данных не выбрана.

  • QUERY

    Текст записанной команды.

Вот пример вывода, сгенерированного в Linux с использованием --syslog. Этот вывод отформатирован для читабельности; каждое записанное сообщение фактически занимает одну строку.

Mar  7 12:39:25 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar  7 12:39:28 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'

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

Spec-Zone.ru

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