У меня есть настройка репликации MySQL между 2 серверами, главный (А) и раб (B). Мне нужно добавить в микс нового подчиненного устройства (C). Я хочу, чтобы это ведомое устройство получало обновления напрямую от ведущего устройства, я не хочу, чтобы оно выполняло цепную репликацию. Однако мастер "горячий", я обычно использую Xtrabackup для создания полной резервной копии мастера, но это заблокирует его на добрые 10 минут, так как размер базы данных составляет около 20 ГБ.
ПРОМЫВКА ТАБЛИЦ С БЛОКИРОВКОЙ ЧТЕНИЯ на ведомом устройстве B, используйте SHOW SLAVE STATUS на BЗапишите бинлог и положение. Затем создайте резервную копию базы данных с помощью Xtrabackup, отправьте резервную копию в C и используйте его для создания ведомого устройства и установите репликацию, чтобы указать на А с позицией binlog, которую я только что записал.
Есть ли лучший способ, который не требует блокировки? B так долго? Или что-то, что легче автоматизировать?
Привет, я знаю безумный способ создания ведомого устройства без увеличения каких-либо операций ведущего (ServerA) или ведомого (ServerB)
Шаг 1) Установите новый сервер (ServerC)
Шаг 2) На ServerC установите MySQL (та же версия, что и ServerB)
Шаг 3) На ServerC остановка службы mysql
Шаг 4) Скопируйте /etc/my.cnf с ServerB на ServerC
Шаг 5) На ServerC измените server_id на значение, отличное от ServerA и ServerB
Шаг 6) rsync / var / lib / mysql с ServerB на ServerC
Шаг 7) Когда rsync завершится, запустите "STOP SLAVE;" на ServerB
Шаг 8) rsync / var / lib / mysql с ServerB на ServerC
Шаг 9) На ServerB запустите «START SLAVE;»
Шаг 10) На ServerC запускается служба mysql
Шаг 11) На ServerC запустите «START SLAVE;» (Сделайте это, если skip-slave-start находится в /etc/my.cnf)
Попробуйте !!!
Кстати, я абсолютно уверен, что это сработает, потому что я делал это для клиента в течение последних 2 дней. У клиента было 2,7 ТБ данных на ведомом устройстве. Я выполняю синхронизацию с другим сервером, пока ведомое устройство все еще было активным. rsync занял около 11 часов. Затем я запустил STOP SLAVE; на первом ведомом и снова запустил rsync. Это заняло еще час. Затем я выполнил вышеуказанный шаг, и все готово.
Когда мы добавляем подчиненное устройство в наш микс, мы делаем следующее:
Я сделал что @RolandoMySQLDBA предлагает, но также добавляет 6 ' и 8 ' шаги (это решает то, что @ Хуссейн Тамболи Комментарии.):
Шаг 1) Установите новый сервер (ServerC)
Шаг 2) На ServerC установите MySQL (та же версия, что и ServerB)
Шаг 3) На ServerC остановка службы mysql
Шаг 4) Скопируйте /etc/my.cnf с ServerB на ServerC
Шаг 5) На ServerC измените server_id на значение, отличное от ServerA и ServerB
Шаг 6) rsync / var / lib / mysql с ServerB на ServerC
Шаг 6 ') rsync / var /журнал/ mysql на ServerB на ServerC
Шаг 7) Когда rsync завершится, запустите "STOP SLAVE;" на ServerB
Шаг 8) rsync / var / lib / mysql с ServerB на ServerC
Шаг 8 ') rsync / var /журнал/ mysql на ServerB на ServerC
Шаг 9) На ServerB запустите «START SLAVE;»
Шаг 10) На ServerC запускается служба mysql
Шаг 11) На ServerC запустите «START SLAVE;» (Сделайте это, если skip-slave-start находится в /etc/my.cnf)
У вас есть опция «ЗАГРУЗИТЬ ДАННЫЕ ОТ МАСТЕРА», но это крайне не рекомендуется.
Вы делаете еженедельные / ночные резервные копии своей системы? Если это так, также отметьте позицию с вашей резервной копией, тогда вы можете использовать эту резервную копию для настройки нового ведомого устройства. Просто оставьте это и позвольте ему обновиться в течение некоторого времени.
Я попробовал ответы Rolando и работал нормально, но он начал воспроизводиться с самого начала, и мне пришлось добавить больше кода ошибки, чтобы пропустить (я знаю, что это не рекомендуется, но я знаю, что делал).
Выполнив шаг 7, я проверил журнал mysql и записал имя и положение журнала bin и продолжил до 9-го шага. Перед 10-м шагом я просто выполнил change master
для файла журнала и положения журнала. И продолжил с шага 11. Все выглядит нормально.
Вам необходимо изменить uuid подчиненного устройства в auto.cnf, чтобы мастер мог различать два подчиненных устройства.