SystemdDoctor
служба не работает mysql репликация

MySQL: репликация остановилась с ошибкой

Репликация останавливается при первой ошибке применения, чтобы не разойтись с основным сервером. Служба при этом работает, и без проверки состояния это остаётся незамеченным — пока данные не разойдутся окончательно.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Конфликт данных при применении

    Запись, которую пытается применить подписчик, конфликтует с существующей: дубль ключа или отсутствующая строка.

  2. Основной сервер недоступен

    Подписчик повторяет попытки подключения. Отставание растёт, и при длительной недоступности нужные файлы журнала могут быть уже удалены.

  3. Репликация не следит за состоянием

    Без мониторинга остановка остаётся незамеченной. Данные расходятся, и обнаруживается это при переключении.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Полное состояние репликации с ошибкой.

mysql -e 'SHOW REPLICA STATUS\G' 2>/dev/null | head -40

Записи журнала о репликации.

sudo tail -30 /var/log/mysql/error.log | grep -i -E "replica|slave"

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Конфликт данных при применении
Почему происходит
Запись, которую пытается применить подписчик, конфликтует с существующей: дубль ключа или отсутствующая строка.
Как проверить
Посмотрите состояние репликации и ошибку.
mysql -e 'SHOW REPLICA STATUS\G' 2>/dev/null | grep -E 'Last_Err|Running' | head
Как исправить
Разберитесь с конкретным конфликтом: пропуск транзакции допустим только когда вы точно знаете, что она безопасна.
2. Основной сервер недоступен
Почему происходит
Подписчик повторяет попытки подключения. Отставание растёт, и при длительной недоступности нужные файлы журнала могут быть уже удалены.
Как проверить
Посмотрите состояние подключения.
mysql -e 'SHOW REPLICA STATUS\G' 2>/dev/null | grep -E 'Master_Host|Slave_IO_Running|Seconds_Behind' | head
Как исправить
Восстановите связь. Если журнал на основном сервере уже очищен, подписчика придётся пересоздать из копии.
3. Репликация не следит за состоянием
Почему происходит
Без мониторинга остановка остаётся незамеченной. Данные расходятся, и обнаруживается это при переключении.
Как проверить
Проверьте состояние прямо сейчас.
mysql -e 'SHOW REPLICA STATUS\G' 2>/dev/null | grep -cE 'Running: Yes'
Как исправить
Добавьте проверку состояния репликации в мониторинг: это одна строка, которая экономит сутки разбора.

Пример вывода

Репликация остановлена конфликтом данных. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

mysqld[1200]: [ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction; Could not execute Write_rows event on table shop.orders; Duplicate entry '10241' for key 'PRIMARY'
mysqld[1200]: [ERROR] [MY-010586] [Repl] Error running query, replica SQL thread aborted.

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация MySQL: устранение неполадок репликации документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено ручной вставкой конфликтующей строки на подписчике.
    собственная проверка, systemd 255
    сверено 15 сентября 2026