6.5.1.3 Ведение журнала клиента mysql
Клиент mysql может выполнять такие типы ведения журнала для команд, выполняемых интерактивно:
В Unix, mysql записывает команды в файл истории. По умолчанию этот файл называется
.mysql_historyв вашем домашнем каталоге. Чтобы указать другой файл, задайте значение переменной средыMYSQL_HISTFILE.На всех платформах, если задан параметр
--syslog, mysql записывает команды в систему ведения журналов. В Unix этоsyslog; в Windows — это журнал событий Windows. Место назначения, где появляются записанные сообщения, зависит от системы. В Linux место назначения часто является файлом/var/log/messages.
Следующее обсуждение описывает характеристики, применимые ко всем типам ведения журнала, и предоставляет информацию, специфичную для каждого типа ведения журнала.
Как происходит ведение журнала
Для каждого включённого места назначения ведения журнала, ведение журнала команд происходит следующим образом:
Команды записываются в журнал только при интерактивном выполнении. Команды неинтерактивны, например, при чтении из файла или из канала. Также возможно подавить ведение журнала команд, используя параметр
--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.