Безопасное удаление (чистка) логов 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 дней в нашем примере).