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

Неожиданно на одном из серверов закончилось место. Разбираясь в чём дело я выяснил что MySQL забил всё место файликами mysql-bin.xxxxxx. Всё из-за того что я изначально не правильно настроил логирование и забил на это забыл про это.

За долгое время работы бинарные логи в Mysql становятся просто огромные, и могут значительно превышать объем самой базы данных. Файлы вида mysql-bin.xxxxx представляют из себя бинарные логи со всеми запросами к БД. Они нужны для репликации данных или восстановления информации в случае сбоя.

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

Безопасно удаляем логи mysql-bin.xxx в MariaDB

Не нужно вручную удалять эти файлы, так как в любой момент может идти запись или чтение этих файлов. Для их очистки следует использовать встроенные инструменты БД. А в идеале настроить их автоматическую очистку.

По умолчанию размер каждого такого файла гигабайт, а их ротация никак не производится.  За количество логов отвечает переменная expire_logs_days, если она есть. По умолчанию переменная бесконечна, поэтому и кончается место.

Прописываем expire_logs_days=14 в конфиге MySQL. Скорей всего это файлик /etc/my.cnf.
и перезапускаем сервер mysql.

systemctl restart mysql

или

service mysqld restart

Всё! Этого будет вполне достаточно. После перезапуска MySQL или MariaDB должны сами почистить лишние логи. Но если этого не произошло, то можно вручную удалить их через консоль MySQL. Для этого можно воспользоваться вот такой командой:

mysql> flush logs;

или

mysql> PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 14 DAY) + INTERVAL 0 SECOND;

В итоге мы будем иметь постоянно только логи за последние 14 дней. Эту цифру вы можете подобрать для себя в зависимости от критичности данных в БД и размера диска на сервере.

MySQL

Отключить бинарные логи MySQL

Если вы любитель русской рулетки и у вас нет репликации базы, но при этом так же регулярно делаются бекапы всего сервера вместе с базами данных, то бинарные логи можно вообще отключить. Для этого нужно в конфигурационном фале MySQL закоментиовать все строчки связанные с бинарными логами

# log-bin = mysql-bin 
# expire_logs_days = 14

И после этого перезапустить сервер БД.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *