7.4.6 Поддержка журналов сервера
Как описано в разделе 7.4 «Журналы сервера MySQL», сервер MySQL может создавать несколько разных журналов, чтобы помочь вам отследить активность. Однако вам необходимо регулярно очищать эти файлы, чтобы журналы не занимали слишком много места на диске.
При использовании MySQL с включённой функцией ведения журналов, время от времени может потребоваться создание резервных копий и удаление старых журналов, а также настройка MySQL для ведения новых журналов. См. раздел 9.2 «Методы резервного копирования базы данных».
В установке Linux (Red Hat) вы можете использовать скрипт mysql-log-rotate для поддержки журналов. Если вы установили MySQL из дистрибутива RPM, этот скрипт должен был быть установлен автоматически. Будьте осторожны при использовании этого скрипта, если вы используете бинарный журнал для репликации. Не удаляйте бинарные журналы, пока не убедитесь, что их содержимое обработано всеми репликами.
На других системах необходимо установить небольшой скрипт, который запускается из cron (или его эквивалента) для обработки журналов.
Бинарные журналы автоматически удаляются после истечения срока действия бинарного журнала сервера. Удаление файлов может происходить при запуске и при сбросе бинарного журнала. По умолчанию срок действия бинарного журнала составляет 30 дней. Чтобы указать другой срок действия, используйте системную переменную binlog_expire_logs_seconds. Если вы используете репликацию, вы должны указать срок действия, не меньший максимального времени, которое могут отставать ваши реплики от источника. Чтобы удалить бинарные журналы по требованию, используйте оператор PURGE BINARY
LOGS (см. раздел 15.4.1.1 «Оператор PURGE BINARY LOGS»).
Чтобы заставить MySQL начать использовать новые журналы, сбросьте журналы. Сброс журналов происходит при выполнении оператора FLUSH
LOGS или команды mysqladmin flush-logs, mysqladmin refresh, mysqldump --flush-logs или mysqldump --source-data. См. раздел 15.7.8.3 «Оператор FLUSH», раздел 6.5.2 «mysqladmin — Программа администрирования сервера MySQL» и раздел 6.5.4 «mysqldump — Программа резервного копирования базы данных». Кроме того, сервер автоматически сбрасывает бинарный журнал, когда размер текущего бинарного журнала достигает значения системной переменной max_binlog_size.
FLUSH LOGS поддерживает необязательные модификаторы для включения выборочного сброса отдельных журналов (например, FLUSH BINARY LOGS). См. раздел 15.7.8.3 «Оператор FLUSH».
Операция сброса журнала имеет следующие последствия:
Если включено ведение бинарного журнала, сервер закрывает текущий бинарный журнал и открывает новый журнал с последующим порядковым номером.
Если включено ведение общего журнала запросов или журнала медленных запросов в журнале, сервер закрывает и повторно открывает журнал.
Если сервер был запущен с опцией
--log-errorдля записи журнала ошибок в файл, сервер закрывает и повторно открывает журнал.
Для выполнения операторов или команд сброса журналов необходимо подключиться к серверу с помощью учетной записи, имеющей привилегию RELOAD. В системах Unix и Unix-подобных системах существует другой способ сброса журналов — отправка сигнала серверу, что можно сделать с помощью root или учетной записи, владеющей процессом сервера. (См. раздел 6.10 «Обработка сигналов Unix в MySQL».) Сигналы позволяют выполнить сброс журналов без необходимости подключения к серверу:
Сигнал
SIGHUPсбрасывает все журналы. ОднакоSIGHUPимеет дополнительные эффекты, помимо сброса журнала, которые могут быть нежелательными.SIGUSR1вызывает сброс журнала ошибок, общего журнала запросов и журнала медленных запросов. Если вас интересует сброс только этих журналов,SIGUSR1может быть использован в качестве более “лёгкого” сигнала, который не имеетSIGHUPэффектов, не связанных с журналами.
Как уже упоминалось ранее, сброс бинарного журнала создает новый бинарный журнал, в то время как сброс общего журнала запросов, журнала медленных запросов или журнала ошибок просто закрывает и повторно открывает журнал. Для последних журналов, чтобы создать новый журнал в Unix, сначала переименуйте текущий журнал перед сбросом. В момент сброса сервер открывает новый журнал с исходным именем. Например, если файлы общего журнала запросов, журнала медленных запросов и журнала ошибок называются mysql.log, mysql-slow.log и err.log, вы можете использовать последовательность команд, подобных этой, из командной строки:
cd mysql-data-directory
mv mysql.log mysql.log.old
mv mysql-slow.log mysql-slow.log.old
mv err.log err.log.old
mysqladmin flush-logs
В Windows используйте rename вместо mv.
На этом этапе вы можете создать резервную копию mysql.log.old, mysql-slow.log.old и err.log.old, а затем удалить их с диска.
Чтобы переименовать общий журнал запросов или журнал медленных запросов во время выполнения, сначала подключитесь к серверу и отключите журнал:
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';
После отключения журналов переименуйте файлы журналов внешним образом (например, из командной строки). Затем снова включите журналы:
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
Этот метод работает на любой платформе и не требует перезагрузки сервера.
Для того, чтобы сервер пересоздал заданный журнал после внешнего переименования файла, расположение файла должно быть доступным для записи сервером. Это не всегда так. Например, в Linux сервер может записывать журнал ошибок в виде /var/log/mysqld.log, где /var/log принадлежит root и недоступен для записи mysqld. В этом случае операции сброса журнала не могут создать новый журнал.
Для решения этой проблемы вам необходимо вручную создать новый журнал с соответствующей собственностью после переименования исходного журнала. Например, выполните эти команды как root:
mv /var/log/mysqld.log /var/log/mysqld.log.old
install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log
© 2025 Oracle
Licensed under the GPLv2 License.