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

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

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

DB1 -> DB2
DB1 -> BAK

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

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

DB1 -> DB2 -> BAK

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

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

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

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

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

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, который выполнит восстановление настолько быстро, насколько это возможно при копировании файлов на место. Я писал об этом в блоге некоторое время назад. Я считаю, что это идеальный способ настройки рабов, очень быстрый и простой. Резервное копирование занимает много времени, но восстановление происходит очень быстро. Я также настоятельно рекомендую вам использовать свинья вместо gzip, если вы сжимаете свои резервные копии - это легко увеличило время резервного копирования в 4 раза.

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

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