6

我有一个疑问。我在两个不同的服务器上有两个表。这两个表具有相同的结构。一台服务器上的主表每天都会更新,所以我想要一个 cron 作业或 php 脚本 cron 来更新另一台服务器上的第二个从表。我看过很多脚本,但没有一个能解决我的要求。

4

2 回答 2

7

我不敢相信您没有找到合适的脚本来执行此操作。根据服务器到服务器的带宽和连接性以及表数据大小,您可以:

  • 直接转移整个表:

    mysqldump [options] sourcedatabase tablename \
      | mysql [options] --host remoteserver --user username ...
    
  • 使用 MySQL 压缩传输表

    # same as above, mysql has the "-C" flag
    
  • 使用 SSH 加密和压缩传输;mysql是远程执行的

    mysqldump [options] sourcedatabase tablename \
      | ssh -C user@remoteserver 'mysql [options]'
    
  • 使用中间 SQL 文件和 rsync 传输以仅传输修改

    mysqldump [options] sourcedb tbl > dump.sql
    rsync [-z] dump.sql user@remoteserver:/path/to/remote/dump.sql
    ssh user@remoteserver "mysql [options] < /path/to/remote/dump.sql"
    

以上都是简单的表覆盖,远程数据丢失并被主副本替换。mysqldump-plus-rsync-plus-ssh 的运行时间与修改大致成正比,这意味着如果您有一个 10 GB 的 SQL 转储并添加十几个 INSERTS,则传输阶段最多需要几秒钟来同步两个 SQL 文件。

为了优化插入阶段,要么进行完整的 MySQL 复制,要么需要一种方法来识别表上的操作,以便在同步时手动复制它们。这可能需要更改表结构,例如添加“last-synced-on”和“needs-deleting”列,甚至引入辅助表。

于 2012-09-13T11:34:15.983 回答
1

您可以使用一种简单的解决方案 - dbForge Studio for MySQL中的数据同步工具

  1. 创建将比较和同步两个不同 MySQL 服务器上的两个表的数据比较项目。
  2. 使用创建的数据比较项目文档(*.dcomp 文件)在命令行模式下运行应用程序。
于 2012-09-13T11:35:26.830 回答