0

我们正在使用 mysql 和 php 开发一个 Web 应用程序。在我们的应用程序中,我们希望根据来自用户界面的触发器将本地 mysql 数据库与远程 mysql 数据库(在不同的主机上运行)同步。

用户触发器采用网页的形式,当用户单击按钮时,将触发 php 服务器脚本,该脚本应在后台执行此同步。

我们计划通过打开与远程和本地数据库的数据库连接并插入行,一次一行,以一种简单的方式来做到这一点。但是远程数据库表的大小可能非常大(大到几百万个条目),因此我们需要一个更有效的解决方案。

有人可以帮助我们使用 sql 查询/php 代码,它可以有效地执行此数据库同步,而不会给远程数据库带来太多负担。

提前致谢

希亚姆

更新 远程数据库不在我的控制范围内,因此我无法将其配置为主数据库或对其进行任何其他设置。所以这是我的一个主要限制。这就是为什么我想使用 php 以编程方式进行操作。我的另一个选择是从远程数据库中读取 1000 行的块并插入到本地数据库中。但我想知道是否有更好的方法?

4

2 回答 2

2

当数据层内置了这个功能时,你不应该关心应用层的 MySQL 复制。请阅读“使用 MySQL 进行主/从复制”。https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-in-mysql是一个起点。

于 2013-05-22T13:22:45.063 回答
0

就 Master 而言,复制的成本是最小的。它基本上是这样工作的:

  1. Master 将所有(相关)活动记录到一个平面日志文件中
  2. Slave 时不时下载这个日志,并在本地重放二进制日志

因此,对Master的影响只是将线性数据写入日志文件,再加上一点带宽。如果您仍然担心对 Master 的影响,您可以限制 Master 和 Slave 之间的链接(在系统级别),或者只是在低活动时间打开链接(通过STOP/START SLAVE在适当的时间发出命令)。

我还应该提到,内置复制发生在 MySQL 引擎内部的低级别。我认为您无法通过外部流程获得更好的性能。如果您想在点击此“同步”按钮时完全同步您的本地数据库,那就别无所求。

如果您可以接受部分同步,那么您可以让此按钮在短时间内恢复复制(例如START SLAVE10 秒并STOP SLAVE自动再次;用户需要再次单击以获取更多数据)同步。

于 2013-05-22T13:29:15.740 回答