托管和本地生产服务器之间的双向mySQL数据库同步

时间:2011-11-03 02:35:41

标签: php mysql database powershell sync

所以场景是这样的:

我在Windows 2008 Server上运行的本地服务器上有一个mySQL数据库。该服务器仅供我们网络上的用户访问,并包含我们公司的生产计划信息。我在运行linux的托管服务器上运行的本质上是相同的数据库,这意味着可以在线访问,以便我们的客户可以连接到它并更新他们的订单。

我想要做的是数据库中两个表的双向同步,以便两个数据库中的订单都是最新的,并且从我们的服务器到托管的一个单向同步与其他表中的数据。数据库的前端是用PHP编写的。我会说到目前为止我正在做的事情,如果我能在正确的轨道上或者在错误的树上咆哮,人们可以让我知道,并希望能指出我正确的方向,我将不胜感激。

我的第一个想法是(在PHP脚本的末尾生成对订单表的更改)导出已经进行的更改,可能使用INSERT到OUTFILE WHERE account = account或类似的东西。这将使文件的大小保持较小,而不是导出整个订单表。我所依赖的是如何(A)将其导出为SQL文件而不是CSV(B)如何包含有关已删除内容以及插入内容的信息(C)如何获取此文件在另一台服务器上执行SQL语句。

我目前正在研究SSH和PowerShell,但似乎无法确切地说明这将如何运作。我正在研究cron作业和Windows计划任务。但是,最好是在某种程度上更新只是在发生变化时发生,而不是按计划进行,以使它们实时同步,但我无法想象那个。我想每隔几分钟至少运行一次预定的任务/ cronjob,但我想它需要做的就是检查是否有任何需要放到对方服务器上的转储文件,不一定要同步任何事情都没有改变。

有没有人做过这样的事情?我们正在讨论一次在表中更改/添加/删除从1(最小)到160行(最大)。当我继续研究我的选择时,我很想听听人们对这件事的看法。感谢。

另外,为了澄清,我不确定其中一个是真的是主人还是奴隶。没有一个总是准确的数据,更多的是最近需要的数据。

+1更多注意 我现在想到的另一件事是在订单更新脚本的末尾添加另一个指向其他服务器数据库的config / connect脚本,然后重新运行完全相同的查询,因为它们具有相同的结构。现在听起来很容易......想法?

2 个答案:

答案 0 :(得分:3)

您可能不知道MySQL本身可以在机会上彼此同步的单独服务器上配置数据库。有关详细信息,请参阅here;另外,搜索MySQL环复制。设置稍微脆弱,需要您了解MySQL replication。或者你可以建立一个集群;更高的学习曲线,但不那么脆弱。

如果您真的想亲自动手,那么您在设计方面就会有相当大的冒险经历。您必须解决的最大问题不是如何使其工作,而是在其中一台服务器停机一小时或您的DSL调制解调器熔化或硬盘驱动器填满后,如何使其正常工作或...

答案 1 :(得分:2)

如果连接中断,在本地和远程服务器上启动查询可能会出现问题。最好是本地存储在文件中的每个查询,例如GG-MM-DD-HH.sql,然后在小时到期时每小时发送一次数据。例如,更新周期可以减少到5分钟。

这样,如果连接中断,重新建立将占用所有左侧文件。 在文件末尾插入CRC以检查内容。

相关问题