MySQL合并覆盖两数据库前 如何用远程库数据更新本地库count字段
数据库合并前置更新最简操作方案
全程不需要手写复杂的解析逻辑,3步就能完成,所有操作都有兜底,不会随意改坏原有数据。
前置准备
- 确认本地、远程库的
table表都以id为唯一主键/唯一键,这是后续去重、更新的基础 - 操作前分别给本地、远程的正式库做一次全量备份,方便误操作时回滚
步骤1:把远程备份导入本地临时库
不需要修改现有的remotebackup.sql文件,直接在本地新建一个空的临时数据库,把备份完整导进去即可,完全不碰本地正式业务库的数据:
-- 本地数据库执行,建临时中转库 CREATE DATABASE IF NOT EXISTS temp_remote_backup;
然后在命令行执行导入命令,把备份灌入临时库:
mysql -u你的本地数据库用户名 -p temp_remote_backup < remotebackup.sql
Windows环境无命令行操作条件的话,直接用Navicat、DBeaver这类可视化工具新建空库,再选择「运行SQL文件」选中remotebackup.sql导入即可。
步骤2:同步远程count值到本地正式表
直接执行关联更新SQL,把临时库里远程表的count值按id匹配,更新到本地正式table表:
-- 切回你的本地正式业务库执行 UPDATE `table` t JOIN temp_remote_backup.`table` tr ON t.id = tr.id SET t.count = tr.count;
执行完可以抽样核对数据:
- 公共id(比如样例里的1、2)的count值会和远程库保持一致,分别为132、32
- 本地独有的id(比如样例里的3)不会做任何改动,count、data都保留原有值
核对无误后,直接删掉临时库释放空间即可:
DROP DATABASE temp_remote_backup;
步骤3:把本地最终数据导入远程
此时本地的table已经是最终状态:公共id的count是远程最新有效值,同时包含本地独有的id记录。导出本地table的SQL备份后,导入远程时用主键冲突更新/替换逻辑即可,保证已有记录不报错、新记录正常插入:
如果用mysqldump命令行导出,直接加--replace参数,生成的导入语句遇到重复id会自动用本地的正确值覆盖(此时本地公共id的数据和远程原有值完全一致,覆盖不会产生任何问题):
mysqldump -u本地数据库用户名 -p 你的本地正式库名 `table` --replace > local_final_table.sql
把生成的local_final_table.sql导入远程库即可,最终远程库会同时保留原有最新count值,也会新增本地独有的id=3这类记录。
如果用可视化工具导入,直接勾选「遇到重复键时替换」的选项即可,不需要额外修改配置。
避坑提示:不要直接把远程备份source进本地正式库,会直接冲掉本地独有的id记录,一定要用临时库/临时表中转。
内容的提问来源于stack exchange,提问作者Clone
相关产品推荐
相关产品推荐

