Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

BINLOG_DISK_OVERFLOW Linux / DevOps

Безопасное удаление и ротация бинарных логов (binlog) в MySQL: binlog_expire_logs_seconds

Обновлено: 21.08.2026
  • Диск переполняется сотнями файлов вида binlog.000123 или mysql-bin.000456.
  • Сервер аварийно блокирует транзакции в режиме read-only из-за исчерпания свободного места.
  • Удаление файлов логов вручную через rm приводит к нарушению целостности индекса binlog.index.

1. Просмотр текущих файлов бинарных логов

SHOW BINARY LOGS;
SHOW MASTER STATUS;

2. Безопасная ручная очистка бинарных логов

# Удалить все логи старше конкретной даты
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';

# Удалить все логи до определенного файла (не включая его)
PURGE BINARY LOGS TO 'binlog.000150';

3. Автоматическая ротация и настройка срока жизни (TTL)

Отредактируйте /etc/mysql/my.cnf:

[mysqld]
# Хранить логи не более 3 дней (3 дня = 259200 секунд)
binlog_expire_logs_seconds = 259200

# Максимальный размер одного файла бинлога перед ротацией
max_binlog_size = 500M

Применение без перезагрузки:

SET GLOBAL binlog_expire_logs_seconds = 259200;

4. Восстановление при случайном удалении через 'rm'

Если файлы были удалены через консоль Linux и MySQL выдает ошибки:

# Пересоздать чистый binlog поток
RESET MASTER;
💡 Практика специалистов: Перед выполнением PURGE BINARY LOGS обязательно проверьте на репликах через SHOW REPLICA STATUS, какую позицию и файл лога мастера они читают в данный момент (Relay_Master_Log_File), чтобы не удалить несинхронизированные данные.

Частые вопросы (FAQ)

Почему нельзя просто удалить старые binlog-файлы через rm -f?

MySQL ведет текстовый индекс-файл (например, binlog.index), где зарегистрированы все сегменты. Ручное удаление приведет к несоответствию индекса и сбою репликации реплик.

В чем разница между expire_logs_days и binlog_expire_logs_seconds?

Параметр expire_logs_days устарел и поддерживает только целочисленные значения в днях. binlog_expire_logs_seconds позволяет задавать точный срок хранения с точностью до секунды.

Полезные материалы
Рекомендуем