В настоящее время у меня есть главный сервер db (назовем его db1) и 6 подчиненных устройств (slave1-6). Я установил новый сервер (db2) как подчиненный для db1, и он синхронизирован. Я хочу изменить все ведомые устройства на использование db2 вместо db1, но с минимальным временем простоя / потерей данных.
На данный момент единственный способ, которым я могу это сделать, - это закрыть наш веб-сайт (чтобы данные перестали записываться в db1), дождаться обновления всех ведомых устройств, очистить журналы на db1, выключить его. Перезагрузите ведущее устройство на db2, измените все ведомые так, чтобы они указывали на db2 с положением журнала = 0.
Это правильный способ сделать это или есть способ сделать это, не отключая сайт?
Непонятно, перемещаете ли вы приложение для записи в db2 или нет, но вы можете перенастроить подчиненные устройства для репликации с db2, пока система работает.
В прошлом я подходил к этому так:
1) остановить подчиненное устройство на подчиненном [1-6]
2) остановить раб на db2. Обратите внимание, что это информация о файле / pos как подчиненном сервере db1 (Master_Log_File и Exec_Master_Log_Pos), а также о главном журнале pos (показать статус мастера).
3) на ведомом [1-6], «запускать ведомое устройство до тех пор, пока master_log_file = $ file, master_log_pos = $ pos». Это позиции из информации о подчиненном ((Master_Log_File и Exec_Master_Log_Pos) сверху.
4) на этом этапе убедитесь, что подчиненное устройство [1-6] и db2 имеют одинаковые позиции репликации в 'show slave status' по отношению к их главному серверу db1.
5) остановить подчиненное устройство на подчиненном [1-6]
6) сменить ведущего на ведомое [1-6]. Новые значения master_log_file и master_log_pos - это информация, которую вы получили от 'show master status' на db2 на шаге 2.
7) запустить подчиненное устройство на подчиненном [1-6].
Обратите внимание, что этот метод требует некоторого времени, когда репликация устаревает на всех подчиненных БД. Это должно занять несколько минут, если это делается вручную, или вы можете написать сценарий и уменьшить его до секунд. Если ваш сайт не может терпеть устаревание данных из-за задержки репликации, вам придется выполнять эту работу по-другому.
Вы также должны убедиться, что для db2 включены обновления журналов-подчиненных, иначе он не будет правильно реплицировать операторы от своего главного устройства к своим подчиненным.
Удачи!