文档/ 工具中心 · 数据工具/ 数据同步与对比
Tool Center · Data Tools

数据同步与对比

先识别结构与行级差异,再审查脚本、备份目标端并分阶段执行,降低跨环境同步风险。

安全原则:把目标库视为可能被覆盖的一端。任何 DDL 或 DML 执行前,都应确认源 / 目标方向、创建可恢复备份,并先在测试环境验证生成脚本。异构数据库的类型、默认值、函数和索引语法存在方言差异,工具不会保证所有语句都能完全自动转换。

适用场景

数据同步用于把源端已确认的结构或数据变化带到目标端;数据对比用于回答“两个环境究竟差在哪里”。二者可以串联使用,但目标不同:

  • 开发到测试:核对新增表、缺失表、字段与索引差异,生成待审查的结构同步脚本。
  • 迁移后验收:按主键或明确的唯一匹配条件比较源表与目标表,定位仅源端、仅目标端及字段值不一致的记录。
  • 发布前核查:只做结构差异扫描和脚本预览,由 DBA 评估锁表、数据重写、默认值及回滚影响后再安排窗口。
  • 环境数据补齐:针对已确认的少量差异生成 INSERT / UPDATE / DELETE 脚本,逐批执行并复查。

如果任务是整库或大批量跨引擎搬迁,应结合下一篇的数据传输与迁移流程,不要把一次差异修补当成完整迁移方案。

入口路径

打开 MagicDB Studio,进入顶部菜单「工具中心」,在「数据工具」分类中选择「数据同步」「数据对比」。数据同步面板用于选择源 / 目标连接、查看结构差异并生成脚本;数据对比面板用于配置表与记录匹配规则后查看行级差异。

数据同步 · 结构差异与脚本预览
数据同步面板中的源库目标库选择、结构差异与同步脚本预览
数据同步面板:先确认左右两侧的源连接与目标连接,再查看中间的结构差异和待执行同步脚本;脚本预览不等同于已经执行。

前置条件

  • 源连接与目标连接均已在连接管理中创建,并能正常访问待比较的数据库与表。
  • 执行账号至少具有读取源端元数据和数据的权限;若要执行同步,还需具备目标端所需的 DDL / DML 权限。
  • 明确同步方向并记录源库、目标库、数据库 / Schema、表名及环境标识,避免因连接名称相近而反向覆盖。
  • 为目标库创建可验证、可恢复的备份或快照,并记录恢复步骤;仅有“备份成功”提示但未验证恢复链路仍不够。
  • 数据对比应优先选择主键;没有主键时,先确定能唯一且稳定标识记录的匹配列组合,并检查 NULL 与重复值。
  • 在业务低峰或维护窗口操作。大表结构变更、全表扫描和大量更新可能造成锁等待、日志增长或性能波动。
异构边界:跨 MySQL、PostgreSQL、Oracle 等引擎时,应人工检查字段类型、长度与精度、字符集 / 排序规则、默认值、序列、自增、函数表达式、约束和索引。生成结果只能作为候选脚本,不代表目标方言一定可直接执行。

编号步骤

  1. 选择并复核源端与目标端。分别选择连接、数据库 / Schema 和表;用环境名称、主机、库名及只读查询交叉确认方向,不要仅凭连接颜色或相似昵称判断。
  2. 先创建目标端备份。根据变更范围备份整库或相关表,保存备份位置、时间点和恢复命令;重要环境先在隔离实例演练恢复。
  3. 运行结构对比。检查新增 / 缺失表、字段类型与可空性、默认值、主键、约束和索引差异。把“预期发布变更”与“意外漂移”分开记录,不要直接全选。
  4. 预览并审查结构同步脚本。逐条查看 DDL 的执行对象和方向,重点识别 DROP、列类型缩窄、NOT NULL、默认值变化、大表索引重建等高风险语句。异构同步要在目标库方言下人工修订并单独验证。
  5. 配置数据匹配条件并执行对比。优先使用主键;无主键时选择能唯一定位记录的列组合。先检查重复键和 NULL,再比较仅源端、仅目标端与值不同三类结果。
  6. 小批量确认后执行。先把候选 DDL / DML 复制到工作台,在测试环境或事务可控的范围内执行;确认影响行数、错误信息与耗时后,再分批处理其余差异。不要在未审查时一次执行全部 DELETE 或 UPDATE。
  7. 执行后复查。重新运行结构与数据对比,并用只读 SQL 抽查总行数、关键聚合值、时间边界和业务关键记录。若结果异常,立即停止后续批次并按预先验证的恢复方案回滚。

参数说明

参数 / 选择项作用检查重点
源连接 / 源库作为结构或数据的参照端确认环境、主机、数据库 / Schema 与读取范围,避免把旧环境误作基准
目标连接 / 目标库接收候选变更的一端确认备份和权限;脚本中的对象限定名必须指向预期目标
比较对象限定数据库、Schema、表或待比较表集合先从单表或小范围开始,排除临时表、归档表和不应同步的对象
结构差异展示表、字段、主键、约束、索引等元数据差异区分真实漂移与方言表现差异,尤其检查精度、默认值和标识符大小写
同步脚本根据所选结构或数据差异生成候选 DDL / DML执行前检查 DROP、DELETE、全表 UPDATE、锁表风险、事务边界与目标方言
主键 / 匹配条件把源端记录与目标端记录配对必须唯一、稳定且两端语义一致;组合列要检查 NULL、重复值与格式差异
比较列决定匹配后参与值比较的字段按需排除更新时间、审计列、随机值或两端生成策略不同的字段
执行批次控制每次实际处理的差异范围优先小批量;每批记录影响行数、耗时和失败明细,便于停止与恢复

预期结果

结构对比完成后,应得到可解释的差异清单,并能把每一项归类为“需要同步”“允许保留”或“待人工确认”。数据对比结果应至少能区分一致记录、仅源端记录、仅目标端记录和字段值不同的记录。执行后的验收不应只看任务状态,还要回到工作台用查询验证:

  • 重新比较后,计划内差异已经消失,计划外对象没有变化。
  • 目标表总行数、关键分组计数、金额 / 数量汇总与预期一致。
  • 按主键抽查新增、更新、删除边界记录,NULL、时区、小数精度和字符内容未被意外转换。
  • 执行日志中的实际影响行数与脚本评审时的估算相符;出现偏差时停止扩大执行范围。
SQL 工作台 · 执行后查询验证
SQL 工作台查询结果表格,用于核对同步后的行数与关键字段
执行后验证:该图展示 SQL 工作台的查询结果,并非数据同步差异界面;可在这里运行只读 SQL,核对同步后的行数、聚合值和关键记录。

常见问题

为什么两端看起来相同,仍显示结构差异?

先检查字段长度 / 精度、可空性、默认值、字符集 / 排序规则、索引顺序及标识符大小写。异构数据库还可能用不同元数据表达同一概念。不要直接执行脚本;先在两端查看实际 DDL,确认是语义差异还是方言表示差异。

表没有主键,数据对比应该怎么配置?

选择业务上唯一且稳定的列组合作为匹配条件,并先用分组计数检查重复值和 NULL。如果找不到可靠的唯一组合,逐行配对可能产生歧义;此时应缩小范围、补充过滤条件,或先治理表结构,而不是强行生成更新 / 删除脚本。

生成的同步脚本可以直接在生产库执行吗?

不建议。先备份目标端,在测试环境验证,并逐条审查脚本中的对象、方言、事务边界和潜在破坏性语句。对大表 DDL 或大量 DML,应评估锁、日志空间与维护窗口,再小批量执行。

异构数据库同步时脚本执行失败怎么办?

停止后续批次,保留错误与已执行语句记录。重点检查类型映射、默认值函数、自增 / 序列、标识符引用、约束与索引语法,并按目标数据库方言人工调整。工具不保证异构方言完全自动转换;修订脚本必须重新在隔离环境验证。

执行后差异数量反而增加怎么办?

立即停止继续同步,确认源 / 目标是否选反、匹配条件是否唯一,以及执行期间是否仍有业务写入。对照每批影响行数和备份时间点定位变化;必要时按已验证的恢复方案还原目标端,再重新设定比较范围。