Репликация MySql через туннель SSH - PullRequest
0 голосов
/ 16 октября 2019

У меня немного уникальная ситуация, и я не смог найти в Интернете никаких ресурсов, обращающихся к ней, поэтому здесь.

У меня есть заданный сервер A (mysql id = 1) иудаленный сервер mysql B (mysql id = 2)

У меня есть SSH-туннель, который устанавливается от сервера A -> сервер B, и в этом туннеле я пересылаю сервер B 3306 в локальный порт (скажем, 1234)

У меня также нет возможности отменить это сопоставление, поэтому моя команда ssh выглядит следующим образом:

ssh -L 1234: remote_server_b: 3306 user @ gateway -i my_key.pem

так на сервере A, чтобы подключиться к mysql на сервере B, я использую mysql -h127.0.0.1 -P1234 и могу без проблем получить доступ к серверу mysql B.

Теперь я хочу настроить репликациюот A (хозяин) до B (раб). однако с сервера B я не могу получить доступ к серверу A, только с A-> B через туннель SSH.

во всей документации по репликации mysql мне нужно установить SSH-туннель от подчиненного сервера (а не мастера в моей настройке)

кто-нибудь знает, как это сделать, или указать мнек какой-то документации о правильном пути?

1 Ответ

1 голос
/ 17 октября 2019

Чтобы реплицировать базу данных, вы должны:

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

Реализация документирована здесь.

https://dev.mysql.com/doc/refman/5.6/en/replication-implementation.html

Вы можете использовать SSH для туннеля или обратного туннеля.

Туннель в ssh может быть двусторонним, поэтому вы можете подключить удаленный порт к локальному порту или сопоставить удаленный порт с локальным портом.

На сервере A эта команда настроит двойной туннель.

ssh -R 6464:127.0.0.1:3306 -L 6565:127.0.0.1:3306  serveurB 

Извлечение из справочной страницы ssh

 -L [bind_address:]port:host:hostport
 Specifies that the given port on the local (client) host is to be 
 forwarded to the given host and port on the remote side.

 -R [bind_address:]port:host:hostport
 Specifies that the given port on the remote (server) host is to be 
 forwarded to the given host and port on the local side.

Другое решение заключается в использовании socat мощный сетевой инструмент, поэтому он должен быть установлен на сервере B, и вы можете сделать это

 while ( true ) ; 
 do 
      socat EXEC:"ssh SERVER_B 'socat - TCP4-LISTEN:6464,reuseaddr'"    \
                                                       TCP4:localhost:3306 ;
 done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...