#Что означает неисправность и в каких условиях возникает
В каталоге MySQL быстро увеличивается общий размер файлов бинарного журнала (например, binlog.000123), свободное место заканчивается и запись может остановиться. Бинарный журнал нужен для репликации и восстановления до момента времени, поэтому его нельзя удалять файловым менеджером. Правильный порядок: выяснить фактические файлы и период хранения, определить самую отстающую и отключённые реплики, проверить цепочку резервных копий, только затем согласовать удаление старых записей серверной SQL-командой.
#Возможные причины: как различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Отключённая или отстающая репликаРеплике нужны старые события, которые нельзя пока удалять. | На реплике Source_Log_File указывает на ранний журнал либо IO не подключается. | Восстановить чтение с реплики или продлить хранение. |
| Истёк срок уборки либо политика не заданаСрок хранения слишком большой для доступного диска, автоматическая очистка не срабатывает. | SHOW BINARY LOGS содержит длинную историю, правила хранения не согласованы. | Задать обоснованную политику по RPO и потребностям репликации. |
| Необычно большой объём записейМассовые изменения или миграция создают много событий binlog. | Рост совпадает с загрузкой большого набора строк или операцией ETL. | Сопоставить нагрузку и резервные копии, спланировать место. |
#Пошаговая диагностика и устранение
- Остановите опасные действия и сообщите о рискеПри минимальном свободном месте свяжитесь с ответственным DBA, сообщите filesystem, процент использования и имя экземпляра. Не выполняйте
rm,truncate, RESET BINARY LOGS AND GTIDS или перезапуск службы наугад: это может нарушить репликацию и восстановление. Если есть безопасный альтернативный том, администратор может временно освободить место за счёт несвязанных файлов по обычному регламенту. - Подтвердите, что место занимают именно binlogПо SSH выполните
df -hдля раздела с datadir. В mysql на источнике запроситеSHOW VARIABLES LIKE 'log_bin_basename';,SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';иSHOW BINARY LOGS;. Это покажет настроенный путь, срок и текущий список журналов. Не путайте с relay logs реплики и файлами общего табличного пространства. - Сохраните контрольные сведения и проверку копийУточните, какая резервная копия полная и какие журналы требуются для восстановления после неё. Проверьте, что хотя бы одна копия физически доступна и метод восстановления документирован. Без подтверждения сохранности цепочки резервных копий нельзя выбирать дату очистки только по возрасту файлов.
- Проверьте все реплики, включая временно отключённыеПодключитесь к КАЖДОЙ реплике и выполните
SHOW REPLICA STATUS\G. ЗапишитеSource_Log_File,Read_Source_Log_Pos,Replica_IO_Runningи ошибки, проверяя нужный канал. Если реплика отключена, её позиция может быть старой; без её учёта PURGE способен удалить необходимые события, и после подключения реплика не восстановит работу автоматически. - Определите безопасную границу по самой отстающей репликеСравните файлы в
SHOW BINARY LOGSисточника с первым ещё нужным каждой реплике. Учитывайте и цепочку восстановления до момента времени (PITR). Нельзя выбирать PURGE TO по позиции самой быстрой реплики или просто по числу файлов; согласуйте у DBA самый ранний файл, необходимый хоть одной системе. - Подготовьте команду, но не выполняйте с примерным именемПосле документированного согласования администратор формирует
PURGE BINARY LOGS TO 'имя_проверенного_файла';илиBEFOREс проверенным временем. Команда TO удаляет файлы РАНЬШЕ указанного, но не сам указанный файл. Фиктивный маркер заменяется реальным файлом из SHOW BINARY LOGS только после проверок; не вводите эту строку напрямую из статьи на рабочем сервере. - Проверяйте освобождённое место и репликациюПосле согласованной уборки снова выполните
SHOW BINARY LOGSиdf -h, затем на репликах SHOW REPLICA STATUS. Если очистка не удалила нужный объём, не удаляйте файлы в обход сервера: возможно, журнал ещё используется активной репликой. Если появились ошибки чтения binlog, остановите дальнейшие изменения и восстановите требуемую цепочку по процедуре DBA. - Настройте долговременную политику храненияВместе с владельцем резервных копий определите период хранения исходя из допустимого отставания реплик и срока восстановления, а не выбирайте минимальное число наугад. Проверяйте через
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';действующее значение, сопоставляйте с политикой резервирования и доступным местом; изменение конфигурации и его откат оформите через управление настройками сервера. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить исправление и что делать, если оно не помогло
Успех — свободного места достаточно, требуемые файлы остались доступны, у всех реплик оба потока Yes, нет Last_IO_Error, а контрольное восстановление по утверждённой политике возможно. Если свободного места мало даже после безопасной очистки, расширяйте хранилище и разбирайте объём изменений вместо удаления нужных журналов.