系统启动时的MySQL同步

时间:2014-01-07 22:38:46

标签: mysql rsync

有人能想到在服务器启动之前将mysql数据库与另一个mysql数据库同步的好方法吗?我想也许我可以rsync rc.d中的目录,但这似乎有点冒险。服务器在FreeBSD上运行。

感谢。

澄清:

好的。我正在将mysql设置为php Web应用程序的会话存储。我编写了一个类,它使用为我们的Web应用程序提供重要优势的方法覆盖了php的会话方法。为了最大速度,主mysql服务器将其数据存储在tmpfs分区中。它复制到具有SSD的服务器。

如果发生故障,我的会话管理类将自动转到从属服务器,但是当主服务器重新启动并且mysql服务启动时,会话请求将被重定向到它,但不会有数据存在。因此,我需要在主服务器的启动过程中从从服务器获取数据。

2 个答案:

答案 0 :(得分:1)

如果两个mysql服务器都关闭了:rsync - datadir(我假设rc.d中的不是,因为这会很奇怪?)在盯着它们之前这两个都不是问题,只要新服务器上mysql的版本高或相等(你可能需要在更高版本上运行mysql_upgrade),它就能正常工作。

如果第一个正在运行,那么从热门复制开始,您最好需要主从方案。使用Percona的Xtrabackup,您可以备份包含InnoDB表的实时数据库,并尽可能锁定(但仍会发生一些锁定!),您将该datadir复制到新服务器。现在,它是'同步',因为你可以得到它,但第一台服务器仍在工作,所以数据不断变化。要在xtrabackup_binlog_info文件中存储的点再次使这些更改与set it up as a slave同步。

答案 1 :(得分:1)

是的,如果mysqld守护程序关闭,您可以将数据目录rsync到另一个位置。原始服务器和目标服务器都应关闭其mysql守护进程。

运行mysqld实例的数据目录的rsync是不安全,也不是将其复制到正在运行的mysqld实例。这是因为在任何时候,部分数据仍然可能在内存中,尚未写入磁盘。如果你只使用rsync来复制它,你将得到一个不完整的数据库,几乎可以保证它会被破坏。

另一种选择是使用Percona XtraBackup,它可以快速,在线,物理地复制数据。它包括一种通过网络发送输出的模式,因此您可以使用它立即初始化新服务器。

有关进行流式备份的示例,请参阅http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_stream.html