4.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-операторов, содержащих пароли. См. Раздел 6.1.2.1, «Руководство для конечных пользователей по безопасности паролей». Операторы в файле доступны из клиента mysql при использовании клавиши вверх для вызова истории. См. Отключение интерактивной истории.
Если вы не хотите хранить файл истории, сначала удалите .mysql_history, если он существует. Затем используйте любой из следующих методов, чтобы предотвратить его повторное создание:
Установите переменную среды
MYSQL_HISTFILEна значение/dev/null. Чтобы это значение применялось каждый раз при входе, поместите его в один из файлов запуска вашей оболочки.-
Создайте
.mysql_historyкак символическую ссылку на/dev/null; это нужно сделать только один раз:ln -s /dev/null $HOME/.mysql_history
Характеристики ведения журнала syslog
Если задан параметр --syslog, mysql записывает интерактивные операторы в системную службу ведения журнала. Ведение журнала сообщений имеет следующие характеристики.
Ведение журнала происходит на уровне “information”. Это соответствует приоритету 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.