MySQL 复制 - Percona 工具包 Table 同步 - 外键约束失败

MySQL Replication - Percona Toolkit Table Sync - Foreign Key Constraint Fails

我正在努力使我的开发数据库与生产数据库中的数据保持同步。我发现了 pt-table-sync in the Percona Toolkit.

当我 运行 它时,我经常得到错误 Cannot add or update a child row: a foreign key constraint fails。这发生在 table 经常更新并且有外键的地方。

有没有办法利用这个工具来避免这个问题?我还缺少其他一些工具吗?数据库相当大。最大的 table 有将近八百万行。

您可以暂时禁用本地开发数据库的外键检查:

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=0;

然后 运行 pt-table-sync 更改数据,使其与您的生产数据库同步。

不要忘记重新激活 FK 检查:

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=1;

编辑:Paul Campbell 在上面的评论中正确地指出 pt-table-sync 有一个 --no-foreign-key-checks 选项。这会在 pt-table-sync 连接的会话中禁用 FOREIGN_KEY_CHECKS。

但老实说,我不会使用 pt-table-sync。这是我会做的:

对我的生产数据库进行完整备份并将整个备份下载到我的开发本地平台。使用Percona XtraBackup获取生产的物理备份。

然后我可以使用备份重复地重新初始化开发数据库:

  1. 关闭MySQL服务器
  2. 将备份文件复制到 MySQL datadir
  3. 启动MySQL服务器

对于从生产中复制的每个备份,您可以通过这种方式多次重新初始化您的开发数据库。您可以每天获取一次新备份。

作为附带好处,您将养成定期备份数据库的习惯(无论如何您都应该这样做)。

而使用 pt-table-sync 则需要在每次重新初始化开发数据库时从生产数据库中读取数据。

我不认为 800 万行的表很大。