如何用Percona Toolkit仅同步不同数据库表的插入数据?
用pt-table-sync实现仅插入式数据同步的方案
需求匹配要点
你需要将test1的courses表仅同步新增插入数据到test2,忽略test1的删除、更新操作,同时保留test2原有数据(比如test2中id=5的行),可以通过pt-table-sync的特定参数组合实现。
同步命令
假设源库test1的连接信息为h=source_host,user=db_user,password=db_pass,目标库test2为h=target_host,user=db_user,password=db_pass,执行以下命令:
pt-table-sync \ --ignore-deletes \ --ignore-updates \ --insert-only \ h=source_host,D=test1,t=courses \ h=target_host,D=test2,t=courses \ --user=db_user --password=db_pass
参数作用解析
--ignore-deletes:跳过源库的删除操作,不会删除目标库中已存在的任何数据--ignore-updates:忽略源库的数据更新,不覆盖目标库的现有数据--insert-only:仅执行插入动作,只把源库中目标库没有的新数据添加到目标库- 最后两行分别指定源表和目标表的连接与表信息
预验证(可选)
执行同步前可以添加--dry-run参数,查看工具会生成的SQL语句,确认逻辑符合预期后再执行实际同步:
pt-table-sync \ --ignore-deletes \ --ignore-updates \ --insert-only \ --dry-run \ h=source_host,D=test1,t=courses \ h=target_host,D=test2,t=courses \ --user=db_user --password=db_pass
结果说明
执行后,test2的courses表会保留所有原有数据,同时插入test1中新增的两条数据(由于test2中id=6、7已存在,表的自增主键会自动生成新的id,对应你期望的id=9、10的行)。
内容的提问来源于stack exchange,提问作者Samvel Martirosyan
相关产品推荐
相关产品推荐

