【问题标题】:MySql Replication over SSH tunnel通过 SSH 隧道进行 MySql 复制
【发布时间】:2020-11-11 15:47:09
【问题描述】:

我有一个特殊的情况,我无法在网上找到任何资源来解决它,所以就这样吧。

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

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

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

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

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

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

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

有谁知道如何做到这一点,或者向我指出一些有关正确方法的文档?

【问题讨论】:

    标签: mysql ssh replication


    【解决方案1】:

    要复制数据库,您必须:

    • 做一个完整的数据库副本
    • 在slave上配置一个mysql复制流到master,slave连接并拉取二进制日志。

    这里记录了实现。

    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
    

    【讨论】:

    • 抱歉,我没有能力反向映射隧道。我已经更新了上面的票
    • @user1772250 这不是一张“票”,它是 Stack Overflow 上的一个问题,StackOverflow 不是一个发布票证的产品支持网站。
    • 如果我无法从远程从站访问主站,有没有办法做到这一点?我只是想强制把主人喂给奴隶。
    猜你喜欢
    • 2017-04-16
    • 2018-10-06
    • 2013-05-15
    • 2012-06-19
    • 2021-05-24
    • 2015-12-01
    • 1970-01-01
    • 2016-09-09
    • 2014-09-03
    相关资源
    最近更新 更多