如何确保MySQL从服务器使用SSH隧道从主服务器复制?

我需要确保两个CentOS 5.7服务器之间的MySQL数据库复制。 服务器1具有实时数据库,并且复制已经正常工作到位于互联网上其他地方的服务器2。

显然,这样做不好,因为复制stream量很容易被读取,所以需要保证。

我通过将这个input到服务器2创build一个SSH隧道:

ssh -f root@server1ip -L 3305:server1ip:3306 -N 

我确认我能够成功地从服务器2login到服务器1上的MySQL,使用:

 mysql -h27.0.0.1 -uuser -ppassword -P 3305 

现在,这是否意味着mysql复制现在都自动通过SSH? 无论如何,我可以证实这一点? 还是服务器2 强制通过SSH连接到服务器1,因为我build立了这个端口转发规则?

我注意到,如果我重新启动服务器2,SSH隧道重新启动时不见了,但复制继续(我假设回纯文本)。 有什么我可以做的确保复制停止时隧道下降? 我想确保它不会自动继续在没有SSH的情况下以明文forms复制。

谢谢!

您需要设置从服务器的复制主服务器configuration,以便它将通过通道的绑定端口,而不是复制对等端的外部地址:

 CHANGE MASTER TO MASTER_HOST='127.0.0.1' MASTER_PORT=3305; 

而不是SSH隧道,我会build议使用stunnel ,我发现更容易pipe理非交互式连接。 但这不是必须的。

build立连接(通过SSH或stunnel或其他)后,你必须开始复制 – 见沙恩马登的答案。 确保使用正确的MASTER _ * – 选项(请参阅CHANGE MASTER TO语法 )。

另外,我宁愿使用mysqld的内置SSL支持,就像embobobuild议的一样。 所以,您没有任何外部依赖关系为您的复制设置。

所有的安装程序mysql应该会在重启/重启/ …之后自动启动复制 – 但是一定要监视你的mysql-replication-setup,因为有很多情况和情况会破坏你的设置。 我真的推荐像pt-heartbeat这样的工具(maatkit-tools的mk-heartbeat的inheritance者),因为来自SHOW SLAVE STATUS \G Seconds_Behind_Master是不可靠的。

HTH