Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 托管和本地生产服务器之间的双向mySQL数据库同步_Php_Mysql_Database_Powershell_Sync - Fatal编程技术网

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

Php 托管和本地生产服务器之间的双向mySQL数据库同步,php,mysql,database,powershell,sync,Php,Mysql,Database,Powershell,Sync,所以情况是这样的: 我在Windows 2008 server上运行的本地服务器上有一个mySQL数据库。该服务器仅用于我们网络上的用户访问,并包含我们公司的生产计划信息。我有一个基本上相同的数据库,运行在运行linux的托管服务器上,这意味着可以在线访问,以便我们的客户可以连接到它并更新他们的订单 我要做的是对数据库中的两个表进行双向同步,以便两个数据库中的订单都是最新的,并且从我们的服务器到托管服务器的单向同步包含其他表中的数据。数据库的前端是用PHP编写的。我会说出我目前的工作,如果人们能

所以情况是这样的:

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

我要做的是对数据库中的两个表进行双向同步,以便两个数据库中的订单都是最新的,并且从我们的服务器到托管服务器的单向同步包含其他表中的数据。数据库的前端是用PHP编写的。我会说出我目前的工作,如果人们能让我知道我是否走上了正确的道路,或者我是否走错了路,并希望能为我指明正确的方向,我将不胜感激

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

我目前正在研究SSH和PowerShell,但似乎无法确定这将如何工作。我也在研究cron作业和Windows计划任务。然而,最好是在有变化的时候更新,而不是按计划进行,以保持实时同步,但我不太清楚这一点。我希望至少每隔几分钟运行一次计划任务/cronjob,不过我想它需要做的只是检查是否有任何转储文件需要放在对方服务器上,如果没有任何更改,则不必同步任何内容

有人做过这样的事吗?我们讨论的是一次将表中的1行(最小)更改/添加/删除为160行(最大)。当我继续研究我的选择时,我很想听听人们对这整件事的想法。谢谢

另外,我只是想澄清一下,我不确定其中一个是真正的主人还是奴隶。没有一个总是准确的数据,而是最新的数据需要同时存在于两者之中

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

您可能没有意识到MySQL本身可以在单独的服务器上配置数据库,这些服务器可以机会主义地相互同步。有关详细信息,请参阅;另外,搜索MySQL环复制。设置有点脆弱,需要您了解一下。或者你可以建立一个集群;学习曲线要高得多,但不那么脆弱


如果你真的想自己动手,那么在设计方面,你将面临一场相当大的冒险。您必须解决的最大问题不是如何使其正常工作,而是如何在其中一台服务器停机一小时、DSL调制解调器融化、硬盘驱动器填满或…

在本地和远程服务器上启动查询后使其正常工作,如果连接中断,可能会出现问题。最好将每个查询本地存储在文件中,例如GG-MM-DD-HH.sql,然后在每小时过期时发送数据。例如,更新周期可以缩短为5分钟

这样,如果连接中断,重新建立将接管所有剩余的文件。
在文件末尾插入CRC以检查内容。

哦,是的,我已经开始冒险了:-)!!!两个月前,我从未听说过PHP或mySQL,我们的生产调度系统由excel电子表格和遍布各地的便利贴组成,我们的在线订购被称为GoogleDocs。我们都走了很长的路。对于我们现在的处境,我要用我的最后一个想法。。。我只需在本地服务器上运行查询,然后重新连接到远程服务器并再次运行查询。直到我把复制的其余部分都弄清楚了…复制听起来比现在可怕多了。基本上,他们正按照你的建议行事,但他们已经解决并处理了所有(或至少大部分)边缘和失败案例。您可以在mysql.ini的每一面添加大约10个咒语,调整您的模式,确保防火墙打开,它应该开始工作,并在大多数故障后自动修复。这里有保护它的细节等等,但是不管你的系统最终如何工作,你都必须处理这些细节。