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

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

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

БД1 -> БД2
DB1 -> БАК

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

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

DB1 -> DB2 -> БАК

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

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

решение1

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

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

После того, как это будет запущено на 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, если хотите, на случай, если что-то пойдет не так, например, позиции журналов будут неверными или что-то в этом роде...

решение2

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

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

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

Связанный контент