You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL全库dump增量导入另一同结构MySQL实例且不覆盖原有数据

MySQL 跨服务器数据合并(无存量丢失)操作方案

前置准备

  • 第一时间备份服务器2的现有全量数据,作为操作异常的兜底回滚依据,无备份不执行导入操作。
  • 校验两台服务器的表结构确实完全匹配,避免字段顺序、类型不一致导致的导入错位。
  • 预处理服务器1生成的dump文件:
    • 移除所有涉及表结构修改的语句,包括DROP TABLE、CREATE TABLE、ALTER TABLE这类内容,两库结构已统一,不需要执行这部分逻辑,避免误删、误改服务器2的现有表结构。
    • 提前梳理两库主键、唯一索引的重叠情况:统计dump文件里涉及的所有唯一键值,和服务器2对应表的现有唯一键值做比对,标记出重复条目,确认这部分重复行不需要导入、直接跳过。

核心导入逻辑(保证不丢失服务器2存量数据)

根据两库唯一键的重叠情况选择对应的导入方式,核心原则是遇到冲突优先保留服务器2的原有数据,绝不覆盖:

  • 若两库所有主键、唯一索引值完全无重叠:直接执行普通INSERT导入即可,所有dump中的条目会作为增量写入,不会修改服务器2的原有数据。
  • 若存在部分唯一键/主键重叠:必须使用INSERT IGNORE逻辑完成导入。遇到唯一键冲突时直接跳过对应行,既不会因为冲突中断导入流程,也完全不会覆盖、删除服务器2上已有的冲突行数据,仅写入不冲突的增量条目。

避坑提醒:绝对禁止使用REPLACE INTO或带--replace参数的导入逻辑,这类操作遇到唯一键冲突时会先删除服务器2的原有行,再写入服务器1的行,直接造成存量数据丢失。

具体操作步骤

  1. 批量将dump文件里的普通INSERT INTO语句替换为INSERT IGNORE INTO,可使用命令快速处理:
    sed -i 's/^INSERT INTO/INSERT IGNORE INTO/g' 服务器1导出的dump文件.sql
  2. 执行导入命令,连接到服务器2完成增量写入:
    mysql -h 服务器2地址 -u 数据库账号 -p 对应目标数据库名 < 预处理后的dump文件.sql

导入后校验

  • 对比导入前后服务器2各表的总行数,确认新增行数和“服务器1对应表行数 - 两库重叠唯一键数”的计算值一致。
  • 抽查之前标记的重叠主键,确认服务器2上的存储值和导入前保持一致,没有被覆盖。
  • 抽查服务器1独有的数据条目,确认已经完整写入服务器2的对应表中。

内容的提问来源于stack exchange,提问作者Giovani Fiszt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 22:15:01