数据同步与对比
先识别结构与行级差异,再审查脚本、备份目标端并分阶段执行,降低跨环境同步风险。
适用场景
数据同步用于把源端已确认的结构或数据变化带到目标端;数据对比用于回答“两个环境究竟差在哪里”。二者可以串联使用,但目标不同:
- 开发到测试:核对新增表、缺失表、字段与索引差异,生成待审查的结构同步脚本。
- 迁移后验收:按主键或明确的唯一匹配条件比较源表与目标表,定位仅源端、仅目标端及字段值不一致的记录。
- 发布前核查:只做结构差异扫描和脚本预览,由 DBA 评估锁表、数据重写、默认值及回滚影响后再安排窗口。
- 环境数据补齐:针对已确认的少量差异生成 INSERT / UPDATE / DELETE 脚本,逐批执行并复查。
如果任务是整库或大批量跨引擎搬迁,应结合下一篇的数据传输与迁移流程,不要把一次差异修补当成完整迁移方案。
入口路径
打开 MagicDB Studio,进入顶部菜单「工具中心」,在「数据工具」分类中选择「数据同步」或「数据对比」。数据同步面板用于选择源 / 目标连接、查看结构差异并生成脚本;数据对比面板用于配置表与记录匹配规则后查看行级差异。
前置条件
- 源连接与目标连接均已在连接管理中创建,并能正常访问待比较的数据库与表。
- 执行账号至少具有读取源端元数据和数据的权限;若要执行同步,还需具备目标端所需的 DDL / DML 权限。
- 明确同步方向并记录源库、目标库、数据库 / Schema、表名及环境标识,避免因连接名称相近而反向覆盖。
- 为目标库创建可验证、可恢复的备份或快照,并记录恢复步骤;仅有“备份成功”提示但未验证恢复链路仍不够。
- 数据对比应优先选择主键;没有主键时,先确定能唯一且稳定标识记录的匹配列组合,并检查 NULL 与重复值。
- 在业务低峰或维护窗口操作。大表结构变更、全表扫描和大量更新可能造成锁等待、日志增长或性能波动。
编号步骤
- 选择并复核源端与目标端。分别选择连接、数据库 / Schema 和表;用环境名称、主机、库名及只读查询交叉确认方向,不要仅凭连接颜色或相似昵称判断。
- 先创建目标端备份。根据变更范围备份整库或相关表,保存备份位置、时间点和恢复命令;重要环境先在隔离实例演练恢复。
- 运行结构对比。检查新增 / 缺失表、字段类型与可空性、默认值、主键、约束和索引差异。把“预期发布变更”与“意外漂移”分开记录,不要直接全选。
- 预览并审查结构同步脚本。逐条查看 DDL 的执行对象和方向,重点识别 DROP、列类型缩窄、NOT NULL、默认值变化、大表索引重建等高风险语句。异构同步要在目标库方言下人工修订并单独验证。
- 配置数据匹配条件并执行对比。优先使用主键;无主键时选择能唯一定位记录的列组合。先检查重复键和 NULL,再比较仅源端、仅目标端与值不同三类结果。
- 小批量确认后执行。先把候选 DDL / DML 复制到工作台,在测试环境或事务可控的范围内执行;确认影响行数、错误信息与耗时后,再分批处理其余差异。不要在未审查时一次执行全部 DELETE 或 UPDATE。
- 执行后复查。重新运行结构与数据对比,并用只读 SQL 抽查总行数、关键聚合值、时间边界和业务关键记录。若结果异常,立即停止后续批次并按预先验证的恢复方案回滚。
参数说明
| 参数 / 选择项 | 作用 | 检查重点 |
|---|---|---|
| 源连接 / 源库 | 作为结构或数据的参照端 | 确认环境、主机、数据库 / Schema 与读取范围,避免把旧环境误作基准 |
| 目标连接 / 目标库 | 接收候选变更的一端 | 确认备份和权限;脚本中的对象限定名必须指向预期目标 |
| 比较对象 | 限定数据库、Schema、表或待比较表集合 | 先从单表或小范围开始,排除临时表、归档表和不应同步的对象 |
| 结构差异 | 展示表、字段、主键、约束、索引等元数据差异 | 区分真实漂移与方言表现差异,尤其检查精度、默认值和标识符大小写 |
| 同步脚本 | 根据所选结构或数据差异生成候选 DDL / DML | 执行前检查 DROP、DELETE、全表 UPDATE、锁表风险、事务边界与目标方言 |
| 主键 / 匹配条件 | 把源端记录与目标端记录配对 | 必须唯一、稳定且两端语义一致;组合列要检查 NULL、重复值与格式差异 |
| 比较列 | 决定匹配后参与值比较的字段 | 按需排除更新时间、审计列、随机值或两端生成策略不同的字段 |
| 执行批次 | 控制每次实际处理的差异范围 | 优先小批量;每批记录影响行数、耗时和失败明细,便于停止与恢复 |
预期结果
结构对比完成后,应得到可解释的差异清单,并能把每一项归类为“需要同步”“允许保留”或“待人工确认”。数据对比结果应至少能区分一致记录、仅源端记录、仅目标端记录和字段值不同的记录。执行后的验收不应只看任务状态,还要回到工作台用查询验证:
- 重新比较后,计划内差异已经消失,计划外对象没有变化。
- 目标表总行数、关键分组计数、金额 / 数量汇总与预期一致。
- 按主键抽查新增、更新、删除边界记录,NULL、时区、小数精度和字符内容未被意外转换。
- 执行日志中的实际影响行数与脚本评审时的估算相符;出现偏差时停止扩大执行范围。
常见问题
为什么两端看起来相同,仍显示结构差异?
先检查字段长度 / 精度、可空性、默认值、字符集 / 排序规则、索引顺序及标识符大小写。异构数据库还可能用不同元数据表达同一概念。不要直接执行脚本;先在两端查看实际 DDL,确认是语义差异还是方言表示差异。
表没有主键,数据对比应该怎么配置?
选择业务上唯一且稳定的列组合作为匹配条件,并先用分组计数检查重复值和 NULL。如果找不到可靠的唯一组合,逐行配对可能产生歧义;此时应缩小范围、补充过滤条件,或先治理表结构,而不是强行生成更新 / 删除脚本。
生成的同步脚本可以直接在生产库执行吗?
不建议。先备份目标端,在测试环境验证,并逐条审查脚本中的对象、方言、事务边界和潜在破坏性语句。对大表 DDL 或大量 DML,应评估锁、日志空间与维护窗口,再小批量执行。
异构数据库同步时脚本执行失败怎么办?
停止后续批次,保留错误与已执行语句记录。重点检查类型映射、默认值函数、自增 / 序列、标识符引用、约束与索引语法,并按目标数据库方言人工调整。工具不保证异构方言完全自动转换;修订脚本必须重新在隔离环境验证。
执行后差异数量反而增加怎么办?
立即停止继续同步,确认源 / 目标是否选反、匹配条件是否唯一,以及执行期间是否仍有业务写入。对照每批影响行数和备份时间点定位变化;必要时按已验证的恢复方案还原目标端,再重新设定比较范围。
MagicDB Studio