MySQL通过SSH隧道进行复制

时间:2016-12-02 01:15:56

标签: mysql ssh replication tunnel

我无法通过SSH隧道设置复制,尽管在官方文档,文章和SO问题上花了很多时间。

我的主人是192.168.0.105,奴隶是192.168.0.104。我已经通过以下方式设置了SSH隧道:

ssh -L 3305:127.0.0.1:3306 tunneluser@192.168.0.105 -f -N

其中tunneluser上的本地用户。

我在从站上得到以下输出(省略了不相关的行):

mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 127.0.0.1
                  Master_User: slave_user
                  Master_Port: 3305
                  ...
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
                  ...
                Last_IO_Errno: 2003
                Last_IO_Error: error connecting to master 'slave_user@127.0.0.1:3305' - retry-time: 10  retries: 1
                  ...
1 row in set (0.00 sec)

令我困惑的部分是,如果我尝试:

mysql -h 127.0.0.1 -P 3305 -u slave_user -p

登录时没有任何问题。我开始认为这与权限有关,但我找不到任何暗示来证实我的理论。

我尝试将隧道设置为mysql用户,但是,这种方式也不起作用。没错,但我不得不试一试。

有没有人对如何调试这个有什么建议?

如果我直接通过端口3306,它的运行没有任何问题。

1 个答案:

答案 0 :(得分:0)

好几天后,我在ServerFault上发现了一个类似的问题:

<强> MySQL Replication Over SSH - Last_IO_Errno: 2003 - error connecting to master

事实证明SELinux必须做到这一切!正如 @Tek Jau 所解释的那样,您可以通过semanage添加此自定义端口来解决此问题:

sudo /usr/sbin/semanage port -a -t mysqld_port_t -p tcp 3305

希望这有助于任何偶然发现类似问题的人。