Есть master и slave серверы на MariaDB в разных датацентрах. Seconds behind master всегда 0. В датацентре с master был сбой электричества, сервер выключился. После включения произошла рассинхронизация. На slave сервере оказались данные, которых не было на master (новые id, более свежая информация), поэтому при запуске репликации ошибка "Duplicate entry". После удаления на slave соответствующих записей процесс пошел. После того, как slave догнал master, на master каким-то образом оказались данные, которые так и не появились на slave.
Два вопроса:
1. Можно ли избежать таких ситуаций? Чтобы в случае сбоя не получалось такой каши.
2. Если подобное произошло, то как проще всего синхронизировать slave без повторного переноса всех данных? Со slave снимаются полные бэкапы через mysqldump в tab формате (в sql только создание таблицы плюс данные в txt). Отдельно сохраняется результат SHOW MASTER STATUS на момент бэкапа (репликация остановлена). Этого недостаточно, чтобы, например, откатить slave и заново применить изменения с master?
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