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

У меня репликация MySQL настроена в рабочем режиме следующим образом:

DB1 -> DB2
DB1 -> BAK

куда DB2 а также BAK являются рабами DB1, Все 3 сервера синхронизированы (0 секунд от ведущего) и имеют более 30 ГБ данных.

Я хотел бы поместить серверы в новую конфигурацию master-slave следующим образом:

DB1 -> DB2 -> BAK

Каков наилучший способ изменить главный хост на BAK?

Есть ли способ избежать необходимости останавливать подчиненную нить на DB2 и получить mysqldump для BAK (5-6 часовых процессов)?

2 ответа

Они называют это каскадной репликацией главный-раб-раб. Вам нужно включить log-bin и log-slave-updates в DB2, смотрите здесь:

http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html

Как только он запускается на BD2, на BAK вам нужно сменить ведущее устройство и сбросить ведомое устройство, чтобы сбросить его информацию журнала, аля:

mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave

Где "..." - это обычные варианты: http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html

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

Как вы говорите, дамп и импорт могут длиться вечно. Гораздо лучший вариант - использовать xtrabackup, который сделает восстановление примерно так же быстро, как и скопирует файлы на место. Я писал об этом некоторое время назад. Я считаю, что это идеальный способ настроить рабов, действительно быстрый и простой. Резервное копирование занимает много времени, но восстановление происходит очень быстро. Я также настоятельно рекомендую вам использовать pigz вместо gzip, если вы сжимаете свои резервные копии - это легко увеличило в 4 раза мое время резервного копирования.

Если вы можете организовать одновременную остановку обоих ведомых устройств (чтобы они одновременно указывали на один и тот же журнал и позицию на db1), например, на мгновение остановив DB1, тогда вы можете безопасно перезаписывать BAK в DB2, используя его основную информацию без необходимости. сделать длительное восстановление. Как говорит Тройенгель, наиболее важным является то, что для выполнения ретрансляции вам нужны обновления log-slave, в противном случае в BAK будут отправляться только операторы, происходящие из DB2.

Я также рекомендую вам установить DB2 только для чтения. Это не повлияет на репликацию, но безопаснее, поскольку вы не получите данные в DB2 и BAK, которых нет в DB1.

Другие вопросы по тегам