22.11.2020 0 min to read

MYSQL ограничение размера и срока хранения binlog, удаление устаревших бинарных логов

Category : Статьи

Проблема: два 8.0.22 MySQL Community Server в среде Oracle Linux Server release 7.9, настроена Master-Slave репликация, катастрофически быстро уменьшилось место на диске с данными после загрузок и удаления больших объемов данных.

Причина: MySQL все изменения данных сохранил нарастающим итогом в бинарных логах, которые используются для репликации. И на мастере и на слейве.


Срок хранения бинарных логов в конфигурационном файле *.cnf указывается значением в секундах 7*24*60*60=604800 (соответствует семи дням )

binlog-expire-logs-seconds=604800

Если перезагрузка нежелательна, то установить в консоли

SET GLOBAL binlog_expire_logs_seconds = 604800;

После изменения срока хранения бинарных логов во время работы или при перезапуске сервера файлы не удаляются. Удалить бинарные логи страше 7 дней:

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

Удалить с указанием до до какого файла

PURGE BINARY LOGS TO 'binlog_00023';

Удалить с указанием точного времени
PURGE BINARY LOGS BEFORE 'DATETIMESTAMP';

 


Помним, что переменная expire-logs-days объявлена deprecated и будет удалена в будущих релизах, поэтому срочно во всех проверенных временем конфигах следуем рекомендациям из error.log и документации:

[Warning] [MY-011068] [Server] The syntax 'expire-logs-days' is deprecated and will be removed in a future release. Please use binlog_expire_logs_seconds instead.

При этом важно, что устаревшее значение expire_logs_days и новое binlog_expire_logs_seconds являются взаимоисключающими. Нельзя налету поменять binlog_expire_logs_seconds, если сервер запущен с опцией expire_logs_days. Нужно в конфигурационном файле убрать устаревшую опцию и перезапустить сервер. Иначе будет ошибка:

Error Code: 11079. The option expire_logs_days cannot be used together with option binlog_expire_logs_seconds. Therefore, value of expire_logs_days is ignored.