所以场景是这样的:
我在Windows 2008 Server上运行的本地服务器上有一个mySQL数据库。该服务器仅供我们网络上的用户访问,并包含我们公司的生产计划信息。我拥有与运行Linux的托管服务器上运行的数据库基本相同的数据库,该数据库可以在线访问,以便我们的客户可以连接到该数据库并更新其订单。
我想做的是数据库中两个表的双向同步,以便两个数据库中的订单都是最新的,并且从我们的服务器到托管的一个单向同步,同时还有其他表中的数据。数据库的前端是用PHP编写的。我会说到目前为止我正在做的事情,如果人们可以让我知道我是否在正确的道路上或在错误的树上吠叫,并希望指明正确的方向,我将不胜感激。
我的第一个想法是(在对订单表生成更改的PHP脚本的末尾)导出已进行的更改,也许使用INSERT到OUTFILE WHERE account = account或类似的东西。这将使文件的大小保持较小,而不是导出整个订单表。我卡在嘴上的是如何(A)将其导出为SQL文件而不是CSV文件(B)如何包括有关已删除内容和已插入内容的信息(C)如何获取此文件在另一台服务器上并执行SQL语句。
我目前正在研究SSH和PowerShell,但似乎无法就其确切工作方式制定坚实的愿景。我正在研究cron作业和Windows计划的任务。但是,最好以某种方式仅在发生更改时才进行更新,而不是按计划进行更新以保持实时同步,但这是最好的选择,但我不能完全确定。我想至少每隔几分钟运行一次计划的任务/任务,尽管我想它要做的就是检查是否有任何转储文件需要放入对端服务器,而不必同步如果没有任何改变的话。
有没有人做过这样的事情?我们正在谈论一次在表中从1(最小)更改为160(最大)行。当我继续研究自己的选择时,我很想听听人们对这件事的想法。谢谢。
另外,为了澄清起见,我不确定其中之一是主机还是从机。没有一个数据始终是准确的数据,而是两者都需要的最新数据。
+1更多说明
我现在正在考虑的另一件事是,在订单更新脚本的最后一侧添加另一个指向其他服务器数据库的配置/连接脚本,然后重新运行完全相同的查询,因为它们具有相同的结构。现在听起来很容易...。
最佳答案
您可能没有意识到,MySQL本身可以在机会相互同步的单独服务器上配置数据库。有关详细信息,请参见here。另外,搜索MySQL环形复制。设置有些脆弱,需要您稍微了解MySQL replication。或者您可以构建集群;高得多的学习曲线,但不那么脆弱。
如果您真的想自己动手做,那么您将在设计上经历一次冒险。您要解决的最大问题不是如何使其工作,而是其中一台服务器停机一个小时或您的DSL调制解调器崩溃或硬盘驱动器装满或...后如何使其正确工作。