Неожиданно на одном из серверов закончилось место. Разбираясь в чём дело я выяснил что 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 закоментиовать все строчки связанные с бинарными логами
# log-bin = mysql-bin # expire_logs_days = 14
И после этого перезапустить сервер БД.