将二进制日志文件推送到MySQL slave

时间:2017-11-27 20:24:02

标签: mysql

我使用MySQL来存储船上许多传感器的日志数据,并希望将该数据库复制到Web服务器上的只读MySQL实例。

Web服务器有一个静态IP,但是日志服务器将从不同的路由器后面有一个动态IP地址,具体取决于该船的位置。

据我所知,通过阅读,二进制日志文件通常由主服务器从主服务器请求,这在我的应用程序中是不可行的。

是否有可能推动'二进制日志文件到远程从服务器实现只读MySQL数据库的更新?

除了使用带脚本的MySQL转储文件之外的任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

不幸的是,MySQL复制依赖于主服务器的IP地址。因此,如果主服务器更改IP地址,您将在副本上获得复制错误。但这并不是那么糟糕,因为MySQL复制非常强大。

但是你必须在你的主人身上设置足够长的“expire_logs_days”,以确保即使在没有连接的情况下也可以使用所有的bin日志 - 特别是如果你的船很长时间没有网络连接。当然要存储大量的bin日志,你需要拥有巨大的磁盘 - 或更好的磁盘阵列以避免错误。

master必须能够在没有崩溃的情况下运行,因此master上bin日志的连续性不会出现问题。

也许你会在以下可能性中找到一些灵感:

场景1 - 尝试使用VPN

我不是网络大师,但您可以尝试使用从船上的主人使用VPN到使用OpenVPN或ZeroTier的类似物,或使用其他具有静态地址的互联网服务器,这两台机器都可以访问。通过这种方式,您将创建虚拟网络,并在此VPN中使用IP寻址主站。可能需要在移动时重复修改主服务器上的VPN并更改其动态IP。

场景2 - 必要时在副本上更改master的IP:

我不是网络大师,但我们假设您的主人的新动态IP将持续足够长时间,并且可以使用标准互联网通信从外部使用此IP访问主人。并且任一副本都可以找到新的IP,或者您可以将新的master of master发送到副本到某些侦听器或Web服务。如果是这样,那么每次IP更改并且您在副本上出现复制错误时,您只需在副本上使用以下命令:

STOP SLAVE; CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx'; START SLAVE;

这是有效的,因为副本知道bin日志中的哪个最后位置已成功应用。因此,当您仅更改主IP并再次启动复制时,副本将继续。

当然如果master无法通过外部的某些动态IP访问,那么副本将无法联系它...

场景3 - 批量发送数据文件

如果您无法从外面打开VPN或从船上访问MySQL master或确保Internet连接持续时间足够长或使用足够大的磁盘来存储所有存档的bin日志,则可以使用Percona XtraBackup在运行的主服务器上进行热备份。

此工具通过应用备份期间所做的所有更改,对所有数据文件进行一致备份。你可以tar并gzip它并发送到一些云存储。这样您就不会丢失任何数据,并且具有真正一致的备份。

这个解决方案的优点是 - 在目标机器上你只需停止mysql,删除现有的旧数据文件,解压缩/解压缩新数据文件并启动mysql,我们就在这里。无需通常非常耗时地恢复转储文件。