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

Создайте ведомое устройство MySQL из другого ведомого устройства, но укажите его на ведущем устройстве.

Проблема

У меня есть настройка репликации 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. Это заняло еще час. Затем я выполнил вышеуказанный шаг, и все готово.

Когда мы добавляем подчиненное устройство в наш микс, мы делаем следующее:

  • перевести одного раба в автономный режим
  • скопируйте каталог данных базы данных на новое подчиненное устройство (настройки подчиненного устройства - позиция binlog, главный хост и т. д. - будут правильными, поскольку мы скопировали с подчиненного устройства)
  • запустить оригинального раба
  • изменить идентификатор сервера в my.cnf для нового ведомого устройства
  • начать нового раба

Я сделал что @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, чтобы мастер мог различать два подчиненных устройства.