#Что означает неисправность и в каких условиях возникает
На реплике MySQL 8.x показатель Seconds_Behind_Source становится всё больше, хотя соединение с источником может оставаться активным. Само значение — приблизительная оценка: нужно проверить оба потока репликации, состояние сети и обработку событий, а не сразу сбрасывать настройки. Для Percona 8.0 и более старых конфигураций могут встречаться названия SHOW SLAVE STATUS/Seconds_Behind_Master. Здесь основная процедура дана для MySQL 8.4; не смешивайте команды разных версий.
#Возможные причины: как различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Поток применения не справляетсяРеплика принимает события быстрее, чем выполняет записи на диске. | Replica_IO_Running=Yes, Replica_SQL_Running=Yes, но отставание нарастает. | Найти долгую транзакцию, блокировки и узкое место диска. |
| Поток чтения недоступенСеть либо учётные данные не позволяют прочитать новые события. | Replica_IO_Running=No, Last_IO_Error непустой. | Устранить сеть/доступ без изменения координат репликации. |
| Остановилось применение из-за ошибкиРеплика не смогла выполнить конкретное событие. | Replica_SQL_Running=No, Last_SQL_Error сообщает SQL-ошибку. | Выяснить рассогласование данных и восстановить корректно, не пропуская события вслепую. |
#Пошаговая диагностика и устранение
- Проверьте, что подключились именно к репликеВ терминале сервера-реплики откройте mysql с предоставленными правами на просмотр репликации. Введите
SELECT @@hostname, @@version, @@read_only;и сверяйте имя с диаграммой сервиса; read_only сам по себе не гарантирует, что вы на реплике. Не запускайте операции изменения источника, пока не проверена роль сервера. - Снимите полный статус репликацииВ приглашении mysql введите
SHOW REPLICA STATUS\G(в MySQL 8.4 требуется право REPLICATION CLIENT). Сохраните, не публикуя секретов, поляReplica_IO_Running,Replica_SQL_Running,Seconds_Behind_Source,Last_IO_Error,Last_SQL_Error,Relay_Log_Space. Если статус не возвращает строки, проверьте конфигурацию и канал; это не доказательство нулевого отставания. - Сравните три измерения, а не одноСделайте снимок статуса сейчас, затем через несколько минут и повторно после типичного пика. Если Seconds_Behind_Source уменьшается, реплика догоняет; если растёт, сопоставьте с активными запросами и объёмом relay log. Значение NULL означает неизвестное состояние, а 0 не всегда доказывает актуальность при сетевых задержках.
- Разделите проблемы чтения и примененияПри Replica_IO_Running=No проверьте Last_IO_Error, сетевую доступность источника и действительность сертификата TLS; пароль не публикуйте. При Replica_SQL_Running=No смотрите Last_SQL_Error, но не пропускайте транзакции через sql_replica_skip_counter: это может скрыть расхождение данных и осложнить восстановление.
- Найдите задерживающую транзакциюЕсли оба потока Yes, на реплике выполните SHOW FULL PROCESSLIST и по доступным таблицам performance_schema проверьте состояние применяющих потоков. Сопоставьте длительные блокировки и дисковую задержку. Большая единичная транзакция может создавать скачкообразное отставание, даже если нет непрерывной очереди запросов.
- Исключите плановую задержкуВ SHOW REPLICA STATUS проверьте
SQL_DelayиSQL_Remaining_Delay. Если настройка задержки выставлена намеренно, рост Seconds_Behind_Source может быть ожидаемым. Не выключайте механизм отложенной репликации без согласования: такая реплика может быть частью защиты от случайных удалений. - Согласуйте безопасное устранение узкого местаЕсли медленный диск и блокировки подтверждены, освободите ресурсы, уменьшите конкурирующие фоновые задачи и исправьте длительные транзакции в приложении. Настройки параллельного применения меняйте только после проверки совместимости и модели транзакций на тестовой реплике, предварительно сохранив конфигурацию. Не пересоздавайте реплику как первый шаг.
- Проверьте фактическую синхронизациюПосле исправления вновь соберите три снимка SHOW REPLICA STATUS и сравните позиции чтения/применения и отсутствие ошибок. Критичные данные сверяйте контрольным запросом или проверенным инструментом проверки реплик по согласованной методике. Если статус остаётся NULL или позиции не движутся, передайте DBA полные поля без паролей.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить исправление и что делать, если оно не помогло
Результат — оба потока Yes, ошибки пусты, отставание в серии измерений уменьшается до допустимого значения, данные согласованы. Если только число Seconds_Behind_Source стало 0, но при этом IO-поток недоступен, считать проблему решённой нельзя.