Безопасное удаление (чистка) логов mysql-bin в MySQL или MariaDB

Обновлено Обновлено: Опубликовано Опубликовано:

Файлы mysql-bin.xxxxxx представляют из себя бинарные логи со всеми запросами к базе. Они необходимы для репликации данных или восстановления информации в случае необходимости.

Так данные файлы со временем могут занимать много дискового пространства, необходимо выполнить их чистку или, вовсе, настроить автоматическое удаление.

Данная инструкция не привязана к какой-либо системе — она подойдет как для Windows, так и Linux, например, Ubuntu или CentOS. Так как MariaDB — ответвление от MySQL, инструкция также актуально и для нее.

Прежде чем чистить логи, необходимо убедиться, что для СУБД не настроена репликация данных с другими серверами. Если репликация есть, необходимо убедиться, что все данные корректно скопированы. Удаление лога, для которого еще не прошла синхронизация приведет к необходимости восстанавливать репликацию.

Ручная чистка логов

Запросы выполняются из командной оболочки MySQL.

Для удаления конкретного bin-файла:

> PURGE BINARY LOGS TO 'mysql-bin.000145';

* где mysql-bin.000145 — имя файла с логами.

Для удаления логов за определенный период:

> PURGE BINARY LOGS BEFORE '2017-05-07 00:00:00';

* удаляем логи до 5-о мая 2017 года.

Или так:

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 90 DAY) + INTERVAL 0 SECOND;

* удаляем все, оставляем логи за последние 90 дней.

Автоматическое удаление

Открываем конфигурационный файл СУБД:

vi /etc/my.cnf.d/server.cnf

или в более ранних версиях:

vi /etc/my.cnf

и в секцию [mysqld] добавляем следующее:

expire_logs_days = 90

* в данном примере мы настроили срок хранения логов в 90 дней.

Настройки применятся после перезагрузки сервера баз данных:

systemctl restart mysql || systemctl restart mariadb

Также будет выполнена чистка логов, которые старше выставленной даты (90 дней в нашем примере).

# MySQL # Базы данных # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет