MySQL:如何使用差异数据更新远程Web服务器

时间:2013-02-21 19:18:09

标签: mysql mysql-python database-replication

在我的本地计算机上,我维护了几个InnoDB表,它们是我的Web服务器上的镜像副本。每当我有新的或更新的数据时,我都会在本地表上执行该操作。对于更新,通常只有一些表的几个字段。在本地执行有助于我在分段之前执行数据的处理和验证。最后,我想将这些差异数据移动到远程服务器。

如何才能最好地实现整个数据迁移过程。我正在寻找您的投入/体验的几个阶段:

  • 用于识别和获取所有表中的差异数据的命令,
  • 在远程站点上,使用此数据更新相应表的命令
  • 如何确保更新的原子性,以免破坏完整性 用它创建的网页内容。

我计划将整个过程自动化。将来,可能会有1000次此类更新,因此我希望优化此时间和大小。

我使用python并计划使用fabric来运行命令。

1 个答案:

答案 0 :(得分:1)

我尝试使用二进制日志记录对本地数据库的更改。然后,您只需使用mysqlbinlog工具将二进制日志转换为SQL脚本,并将其应用于您的网站。与执行时间点恢复的过程相同。

在完成将本地binlog转换为SQL后,在本地系统上使用FLUSH LOGS(或mysqladmin flush-logs)。通过这种方式,您可以确切地知道上次停止的位置,并且可以在下次上传更改时启动。

我不确定是否以真正的原子方式在Web服务器上应用这些更改。你必须使用交易才能做到这一点。您可以将SQL脚本夹在START TRANSACTION和COMMIT之间,但我想确保binlog本身不包含事务语句。

比较两个数据库并找出最小变化集的另一个工具是Percona Toolkit的pt-table-sync。但该工具通常是为了使数据库相同。您的Web服务器上的生产数据可能不在本地开发人员实例中,因此您可能需要过滤到特定的表,或者pt-table-sync有“插入但不删除”选项或其他内容。我鼓励您仔细阅读文档并在测试实例上进行实验。