Переместить мастер MySQL

В настоящее время у меня есть главный сервер базы данных (назовем его db1) и 6 подчиненных (slave1-6). Я настроил новый сервер (db2) в качестве подчиненного db1, и он синхронизирован. Я хочу изменить все ведомые устройства, чтобы использовать db2 вместо db1, но с минимальным временем простоя / потерей данных.

На данный момент я могу думать только о том, чтобы сделать это - закрыть наш сайт (чтобы данные перестали записываться в db1), подождать, пока все ведомые устройства не обновятся, очистить журналы на db1, выключить его. Сбросьте мастер на db2, измените все ведомые, чтобы указать на db2 с позицией журнала = 0.

Это правильный способ сделать это или есть способ сделать это, не переводя сайт в автономный режим?

1 ответ

Решение

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

То, как я подходил к этому в прошлом:

1) остановить раб на рабе [1-6]

2) остановить раб на db2. Обратите внимание, что это информация о файле /pos в качестве ведомого db1 (Master_Log_File и Exec_Master_Log_Pos) и его позиция в главном журнале (показать статус мастера).

3) на ведомом устройстве [1-6]: "запустить ведомое устройство до тех пор, пока master_log_file = $file, master_log_pos = $pos". Это позиции из ведомой информации ((Master_Log_File и Exec_Master_Log_Pos) сверху.

4) в этот момент убедитесь, что подчиненные [1-6] и db2 имеют одинаковые позиции репликации в "состоянии показа подчиненного" по отношению к своему главному db1.

5) остановить раб на рабе [1-6]

6) сменить хозяина на подчиненном [1-6]. Новые значения master_log_file и master_log_pos - это информация, которую вы получили из 'show master status' на db2 на шаге 2.

7) запустить раб на раба [1-6].

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

Вы также должны убедиться, что в db2 включены log-slave-updates, иначе он не будет правильно реплицировать операторы от своего главного устройства к своим подчиненным.

Удачи!

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