@Hint

Восстановление репликации после сбоя?

Есть master и slave серверы на MariaDB в разных датацентрах. Seconds behind master всегда 0. В датацентре с master был сбой электричества, сервер выключился. После включения произошла рассинхронизация. На slave сервере оказались данные, которых не было на master (новые id, более свежая информация), поэтому при запуске репликации ошибка "Duplicate entry". После удаления на slave соответствующих записей процесс пошел. После того, как slave догнал master, на master каким-то образом оказались данные, которые так и не появились на slave.

Дополнительная информация: таблицы XtraDB, innodb_flush_log_at_trx = 2 (видимо в этом проблема), sync_binlog = 0, binlog_format = MIXED, GTID репликация, log-bin, log_slave_updates.

Два вопроса:
1. Можно ли избежать таких ситуаций? Чтобы в случае сбоя не получалось такой каши.
2. Если подобное произошло, то как проще всего синхронизировать slave без повторного переноса всех данных? Со slave снимаются полные бэкапы через mysqldump в tab формате (в sql только создание таблицы плюс данные в txt). Отдельно сохраняется результат SHOW MASTER STATUS на момент бэкапа (репликация остановлена). Этого недостаточно, чтобы, например, откатить slave и заново применить изменения с master?
  • Вопрос задан
  • 728 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MechanID
Админ хостинг провайдера
1 тогда вам лучше сделать innodb_flush_log_at_trx = 1 и binlog_format = ROW
2 в percona tools есть возможность на ходу сделать сверку и фикс данных между мастером и слейвом, дока - https://www.percona.com/doc/percona-toolkit/2.2/pt... (Внимание! - возможно не работает с мариейДБ - ищите аналог)
для регулярных бекапов у mysqldump есть опция --dump-slave используйте ее вместо SHOW MASTER STATUS
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы