
Это мой первый вопрос здесь, и английский не мой родной язык, но я попытаюсь объяснить.
У меня есть главный сервер MySQL с публичным IP-адресом, работающий в инфраструктуре моего провайдера, и я хочу запустить локальный подчиненный сервер MySQL в своем офисе, который будет реплицировать все данные в целях тестирования.
Настройка репликации работает отлично, я создал SSH-туннель, чтобы мой подчиненный сервер читал бинарный лог с главного сервера, здесь все отлично.
Моя проблема заключается в настройке данных с главного устройства. Обычно, когда я хочу загрузить данные с главного устройства на любое подчиненное устройство в той же сети, я запускаю следующую команду на главном устройстве:
mysqldump 'master' --master-data=1 | mysql 'slave'
но здесь я не могу назначить IP-адрес подчиненному устройству, поскольку оно находится в моем офисе за рядом маршрутизаторов NAT...
Есть ли у кого-нибудь решение, зная, что я не могу остановить мастер, а на нем около 50 ГБ данных. Если у вас есть какое-либо другое решение для осуществления «горячей» передачи данных с мастера на слейв, мне тоже очень интересно.
Заранее спасибо.
решение1
Предположим, что вы можете подключиться к главному серверу по ssh. А как насчет подключения с подчиненного сервера?
ssh master 'mysqldump \'master\' --master-data=1' | mysql 'slave'
Это запустит команду дампа на главном устройстве, но перезагрузит ее локально.
решение2
Почему бы вам просто не переслать его в файл и не передать позже с помощью scp
или rsync
?
mysqldump master --master-data=1 >master.dump
на рабе
mysql <master.dump
Альтернатива, запустите mysqldump
команду на подчиненном устройстве, а не на главном. Возможно, без ошибки выше это будет работать лучше.
Подсказка: Может быть, вам стоит сделать дамп всех баз данных, а не только одной?