Проблема: два 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.