Назад | Перейти на главную страницу

Повторная синхронизация репликации MySQL

Я хотел бы установить режим репликации MySQL без необходимости обслуживания для целей резервного копирования.

Тем не менее, по моему опыту, эти вещи неизбежно в конечном итоге рассинхронизируются. Возможно, это связано с злоупотреблениями разработчика, незапланированными авариями или другими неизвестными. Но я хотел бы периодически повторно синхронизировать ведомые устройства, чтобы убедиться, что незамеченная проблема репликации не остается неисправленной в долгосрочной перспективе.

У кого-нибудь есть работающее / проверенное решение для этого?

Вот мое предлагаемое решение; но я открыт для других возможностей от любого, кто имеет опыт работы с этой проблемой:

Предположительно это так же просто, как на мастере:

mysqldump --all-databases --master-data >dbdump.sql

А затем загрузите этот файл SQL на каждом из ведомых устройств, запустив stop slave раньше и start slave потом. Теоретически подчиненные устройства будут использовать обновленные координаты главного устройства для восстановления синхронизации, и поехали.

Предположительно, это можно автоматизировать как еженедельную работу в непиковые часы.

Но есть ли лучший способ сделать это?

вы используете движки innodb как на рабах, так и на мастерах? избегать запросы, которые могут нарушить репликацию? избежать нечистых отключений mysqls как на мастерах, так и на подчиненных? если это так, то, по моему опыту, довольно надежно.

знать, как ломаются ваши рабы, было бы полезно - остановится ли репликация? если да - с какими ошибками на рабах? или репликация запускается, но ведомые устройства не синхронизируются с мастерами?

если дело во втором случае - можно периодически пробовать бегать pt-table-контрольная сумма чтобы убедиться, что ведомые устройства синхронизированы с ведущими. если вы обнаружите, что это не так - вы можете использовать pt-table-sync [который, как я обнаружил, блокирует главные серверы даже в неблокирующем режиме ... так что не запускайте его в середине напряженного дня].

редактировать: если общий размер данных невелик, вы запускаете innodb на главном сервере и не хотите блокировать мастер с помощью скрипта записи синхронизации pt-table, который вы будете периодически выполнять. сценарий должен:

  • запустить pt-table-контрольную сумму, если все в порядке - выйти
  • взять полный дамп мастера, используя mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=1 -A
  • бегать на раба echo "stop slave"| mysql
  • перезагрузить дамп

благодаря --master-data = 1 ваш дамп будет содержать change master ... к заявлению.

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