SSH隧道上的MySql复制

SSH隧道上的MySql复制,mysql,ssh,replication,Mysql,Ssh,Replication,我有一个独特的情况,我还没有在网上找到任何解决它的资源,所以这里是 我有一个给定的服务器a(mysql id=1)和一个远程mysql服务器B(mysql id=2) 我有一个从服务器A->服务器B建立的SSH隧道,在该隧道中,我将服务器B 3306转发到本地端口(比如1234) 我也没有反向映射的能力,所以我的ssh命令看起来像 ssh-L 1234:远程服务器\u b:3306user@gateway-我有我的钥匙 因此,在服务器A上,为了连接到服务器B上的mysql,我使用mysql-h1

我有一个独特的情况,我还没有在网上找到任何解决它的资源,所以这里是

我有一个给定的服务器a(mysql id=1)和一个远程mysql服务器B(mysql id=2)

我有一个从服务器A->服务器B建立的SSH隧道,在该隧道中,我将服务器B 3306转发到本地端口(比如1234)

我也没有反向映射的能力,所以我的ssh命令看起来像

ssh-L 1234:远程服务器\u b:3306user@gateway-我有我的钥匙

因此,在服务器A上,为了连接到服务器B上的mysql,我使用mysql-h127.0.0.1-P1234,我可以毫无问题地访问mysql服务器B

现在,我想设置从A(主)到B(从)的复制。但是,我无法从服务器B访问服务器A,只能通过SSH隧道从A->B访问

在所有mysql复制文档中,我需要从从属服务器(而不是设置中的主服务器)建立SSH隧道


是否有人知道如何执行此操作,或者为我指出一些有关正确方法的文档?

要复制数据库,您必须:

  • 制作数据库的完整副本
  • 在从机上配置一个mysql复制流,连接到主机和从机,并将提取二进制日志
这里记录了实现

您可以使用SSH连接到隧道或反向隧道

ssh -R 6464:127.0.0.1:3306 -L 6565:127.0.0.1:3306  serveurB 
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

抱歉,我没有反向绘制隧道地图的能力。我已经更新了以上内容ticket@user1772250这不是“票证”,而是关于堆栈溢出的问题,并且StackOverflow不是发布票证的产品支持站点。如果我无法从远程从属设备访问主设备,有没有办法做到这一点?我只是想强行把主人喂给奴隶。不,你不能,请阅读