Spec-Zone.ru › MySQL 5.7

5.4.7 Техническое обслуживание журналов сервера

Как описано в разделе 5.4, «Журналы сервера MySQL», сервер MySQL может создавать несколько различных журналов, чтобы помочь вам отслеживать активность. Однако, для предотвращения избыточного потребления дискового пространства, эти файлы необходимо регулярно очищать.

При использовании MySQL с включенным ведением журналов, время от времени можно создавать резервные копии и удалять старые журналы, а также указывать MySQL на ведение журналов в новые файлы. См. раздел 7.2, «Методы резервного копирования баз данных».

В установках Linux (Red Hat) можно использовать скрипт mysql-log-rotate для обслуживания журналов. При установке MySQL из RPM-дистрибутива, этот скрипт должен быть установлен автоматически. Будьте внимательны при использовании этого скрипта, если вы используете бинарный журнал для репликации. Не удаляйте бинарные журналы, пока не убедитесь, что их содержимое обработано всеми репликами.

В других системах необходимо установить короткий скрипт, который запускается из cron (или его эквивалента) для обработки журнальных файлов.

Для бинарного журнала можно установить системную переменную expire_logs_days, чтобы автоматически удалять бинарные журналы через заданное количество дней (см. раздел 5.1.7, «Системные переменные сервера»). При использовании репликации, значение переменной должно быть не меньше максимального количества дней, которое реплики могут отставать от источника. Для удаления бинарных журналов по требованию, используйте оператор PURGE BINARY LOGS (см. раздел 13.4.1.1, «Оператор PURGE BINARY LOGS»).

Для принудительного переключения MySQL на использование новых журналов, необходимо выполнить сброс журналов. Сброс журналов происходит при выполнении оператора FLUSH LOGS или команды mysqladmin flush-logs, mysqladmin refresh, mysqldump --flush-logs или mysqldump --master-data. См. раздел 13.7.6.3, «Оператор FLUSH», раздел 4.5.2, «mysqladmin — Программа администрирования сервера MySQL» и раздел 4.5.4, «mysqldump — Программа резервного копирования баз данных». Кроме того, сервер автоматически сбрасывает бинарный журнал, когда размер текущего бинарного журнала достигает значения системной переменной max_binlog_size.

FLUSH LOGS поддерживает необязательные модификаторы для включения выборочного сброса отдельных журналов (например, FLUSH BINARY LOGS). См. раздел 13.7.6.3, «Оператор FLUSH».

Операция сброса журналов имеет следующие эффекты:

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

  • Если включено ведение общего журнала запросов или журнала медленных запросов в журнал, сервер закрывает и снова открывает журнал.

  • Если сервер был запущен с опцией --log-error, чтобы запись в журнал ошибок производилась в файл, сервер закрывает и снова открывает журнал.

Выполнение операторов или команд сброса журналов требует подключения к серверу с учетной записью, имеющей привилегию RELOAD. В Unix-подобных системах, еще один способ сбросить журналы — отправить сигнал SIGHUP серверу, что можно сделать с помощью root или учетной записи, владеющей процессом сервера. Сигналы позволяют произвести сброс журналов без необходимости подключения к серверу. Однако, SIGHUP имеет дополнительные эффекты, помимо сброса журналов, которые могут быть нежелательными. Подробности см. в разделе 4.10, «Обработка сигналов Unix в MySQL».

Как упоминалось ранее, сброс бинарного журнала создает новый бинарный журнал, в то время как сброс общего журнала запросов, журнала медленных запросов или журнала ошибок просто закрывает и снова открывает файл журнала. В случае последних журналов, для создания нового файла журнала в 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/log-file-maintenance.html

Spec-Zone.ru

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