不同数据库表之间的数据同步
场景还原: 现在需要对正式环境做升级,需要从实施环境往正式环境导入部分数据,现在需要比对两个数据库之间某个表的数据差异,并将正式环境缺少的部分,从实施环境同步到正式环境。问题就是获取这差异的一部分
思考一下: 如果有差异的数据是有顺序的,比如按照时间顺序、按照主键自增等,找到有差异的部分会很容易。但是两个都不满足呢?
在生产环境上把表备份一下,直接truncate ,将实施环境的所有数据都导入到生成环境就好了?但是生成环境上有一部分数据却发生了修改,直接truncate ? 到底该怎么办呢?
不卖关子了。。。 直接上干货!
方法一、 借助一张辅助表
使用一个辅助表,将实施环境上的表数据全部插入到辅助表,将辅助表和数据导入到生成环境,在生成环境上比对与辅助表数据差异,找到差异数据,插入到生成环境表即可。最后删除辅助表,结束!但是这个过程我试了一下,花了不少时间。尤其是查找差异的数据的时候,哎,加班到11点过。。。
补充:postgresql 中可以使用外部表功能,但是也需要按照插件,创建外表等过程 https://blog.csdn.net/qq_31156277/article/details/90580804
方法二、 好用的navicat
下次遇到这样的情况,怎么办呢, 突然想到navicat
, 之前有用过,只是同步表结构,但是没有使用过数据同步,今天研究了一下,发现贼好用,所以分享一下。
第一步:使用navicat 比对两个表。
指定需要比对的表,然后点击【预览】,切记不要直接点击【开始】;因为同步数据,会涉及
update 、delete 、insert 。
第二步:点击预览,查看同步表和差异
你需要做的是,先预览,查看预览结果。 关注:同步哪一张表数据,改变情况。这两个点,如下图所示:
可以看见包含了2条
insert
,一条delete
。 如果遇见有delete
、update
等情况,需要考虑是否可以插入,这一点很重要!!!。如果不想同步delete 、update 。则需要重新设置一下:
第三步: 高级设置
点击【高级】
,设置一下,是否需要包含删除和更新记录。
我去掉了删除和更新,做增量操作。如下所示。
第四步:开始同步
最后可以点击开始,这样就开始数据同步。 完美的解决了我的问题!
最后用一句话结束: 工具用得好,下班下得早!