文档/ 工具中心/ 数据工具/ 数据传输与迁移
工具中心 · 数据工具

数据传输与迁移

在连接之间复制选定表的数据,或在不同数据库引擎之间处理结构、类型与数据差异;执行前先预览,执行后再核验。

先备份,再写入:传输与迁移会改变目标库。MagicDB Studio 的任务进度与执行结果不能替代可恢复备份;回滚依赖用户事先创建并验证可用的目标库备份或快照。

适用场景

先根据源端与目标端的数据库类型选择工作方式。两者都能搬运数据,但风险重点不同:

方式典型场景主要检查点不应默认认为
同构传输 同类数据库之间复制一批表,例如两个同类型实例之间的数据搬运、测试环境初始化。 目标表是否存在、列顺序与约束是否一致、主键是否冲突、目标端是否已有数据。 同一引擎不等于结构必然一致,也不代表重复执行会自动去重。
异构迁移 不同数据库引擎之间迁移结构与数据,例如 MySQL 到 PostgreSQL。 字段类型映射、默认值、大小写与标识符、精度、时区、布尔值、主键自增及目标方言。 类型建议不等于业务语义完全等价;生成的结构和数据仍需人工审阅。

如果只是检查两端结构差异或生成 DDL,而不是批量搬运数据,应优先使用「数据同步与对比」。下图展示的是数据同步的结构对比与同步脚本确认阶段,用于说明写入前审阅脚本的原则,并非数据传输任务的进度界面。

数据同步 · 同步脚本确认
数据同步面板中按表列出的建表 SQL 与执行同步按钮
数据同步脚本确认画面:界面列出 categories、order_items、orders 等表的建表 SQL,并提供复制与执行同步入口;该图是结构同步上下文,不是数据传输或异构迁移进度页。

入口路径

  1. 先在「连接中心」确认源连接与目标连接都能正常访问,并明确各自的数据库或 Schema。
  2. 从顶部菜单进入「工具中心」,在「数据工具」分类中选择数据传输数据迁移
  3. 同类数据库之间批量复制表数据时选择「数据传输」;跨数据库引擎且需要处理类型差异时选择「数据迁移」。
  4. 进入面板后重新核对源端和目标端方向,避免把有数据的一端误设为写入目标。
边界:页面以当前已上线的数据传输与数据迁移能力为准。不同数据源可用的字段类型和写入选项可能不同,实际操作应以面板展示及预览结果为准,不要套用其他数据库的参数。

前置条件

  • 连接可用:源账号至少能读取所选表,目标账号具备本次操作所需的建表或写入权限。
  • 范围明确:列出需要迁移的表、预计行数、主键以及表之间的外键依赖;大表与高频写入表应单独安排窗口。
  • 目标已备份:在执行追加、清空后写入或重建结构之前,由用户完成目标库备份或快照,并至少确认备份文件可读取、恢复路径可用。
  • 业务已协调:源表持续写入会造成前后批次时间点不一致;需要强一致快照时,应在数据库侧采用合适的一致性方案或安排停写窗口。
  • 映射已评审:异构迁移先核对字符集、数值精度、日期时区、空值、默认值、枚举和自增策略,不仅检查字段名称。
  • 容量充足:确认目标端磁盘、日志空间、连接数和事务承载能力,避免大批次写入挤占在线业务资源。
PostgreSQL 工作台 · 对象树与查询结果
PostgreSQL 工作台左侧对象树展开 demo Schema 的 users 表,右侧显示查询与十二行结果
PostgreSQL 工作台与对象树上下文:左侧展开 postgres 数据库、demo Schema、users 表及列/索引/外键节点,右侧执行抽样查询并显示 12 行结果;可用于迁移前识别对象和迁移后抽查数据,但该图并非数据迁移向导的表选择界面。

编号步骤

  1. 固定基线并备份目标。记录源端与目标端的数据库类型、Schema、关键表行数和抽样查询结果;随后创建目标库备份或快照。涉及覆盖、清空或重建时,未完成备份就不要继续。
  2. 选择模式与连接方向。同构场景进入数据传输,异构场景进入数据迁移;选择源连接、源数据库或 Schema,再选择目标连接和落点。确认页面上的箭头方向与变更单一致。
  3. 选择表并处理依赖。只勾选本次范围内的表。先迁移无外键依赖的基础表,再处理引用它们的明细表;对超大表、日志表或仍在写入的表分开执行,降低单次失败范围。
  4. 审阅结构与字段映射。逐表核对源列到目标列的对应关系,重点检查精度缩窄、字符串长度、日期时区、布尔值、二进制字段、空值与默认值。异构迁移出现类型建议时,按真实数据样本确认,而不是直接接受。
  5. 确定目标写入策略与批次。目标为空且结构已确认时可按任务选项写入;目标已有数据时先判断是追加、清理后写入还是重建。不要假设工具会自动合并重复主键。先用较小批次试跑,再根据目标库负载与失败反馈调整。
  6. 预览并小范围确认。检查目标表是否存在、映射结果、预计写入范围及可能生成的结构脚本。优先选择一张小表或受控数据集完成试迁移,确认目标端查询、字符显示和约束行为正常后再扩大范围。
  7. 执行并观察结果。启动任务后关注进度、已传行数和错误信息。不要仅凭进度到达 100% 判定业务迁移成功;任务结束后继续执行行数、主键、空值、聚合值和业务样本核验。
  8. 验收或回滚。保存任务结果与核验记录。发现不可接受的缺行、截断、错码或约束异常时停止后续批次;回滚应使用用户事先验证的备份或快照,并在恢复后再次核对基线。

参数说明

以下是配置时必须做出的关键决策。具体控件名称与可选值可能因数据库类型而异,以当前面板实际显示为准。

参数或决策作用检查与建议
源连接 / 源 Schema 决定读取数据与结构的来源。 使用只读查询确认库名、Schema 和环境标识,避免把测试库与生产库混淆。
目标连接 / 目标 Schema 决定实际发生写入的位置。 执行前二次确认连接名称、主机、数据库和账号权限;目标方向错误是高风险操作。
传输 / 迁移模式 区分同类数据库数据复制与异构数据库结构、类型处理。 跨引擎使用迁移思路审阅方言与类型;不要只因表名相同就按同构处理。
表选择 控制本次任务涉及的对象范围。 按依赖顺序分组;大表单独执行。临时表、审计表和归档表是否需要搬运应由业务确认。
字段映射 指定源列与目标列对应关系及类型转换。 检查名称之外的长度、精度、时区、字符集、空值、默认值和自增语义;先用真实边界值试验。
批次大小 影响每轮批量 INSERT 的吞吐、事务压力和失败重试范围。 先小批试跑;目标日志或锁等待升高时减小批次。批次越大并不必然越快。
目标写入策略 决定目标已有数据如何处理。 追加可能触发唯一键冲突;清空后写入和重建具有破坏性,必须先备份。若当前面板未提供合并策略,不要把追加当作自动 Upsert。
结构处理 决定复用目标表,还是按迁移结果创建或调整结构。 任何生成的 DDL 都应先预览;索引、外键、触发器、序列和数据库专有对象需单独核对,不应只验字段列表。

预期结果

一次可验收的传输或迁移,不只是任务显示完成,还应满足以下检查:

  • 任务层:所选表均有明确的完成或失败状态,错误信息已保存,未出现不明原因中断。
  • 数量层:在同一业务时间点比较源端与目标端行数;对持续写入的源表说明统计口径,不能把时间差导致的行数变化直接判为丢失。
  • 键与空值:检查主键唯一性、关键外键引用、非空字段和默认值,确认没有因映射产生额外空值或重复记录。
  • 内容层:按主键头部、中段、尾部随机抽样,并覆盖中文、特殊字符、最大精度数值、跨时区时间、长文本和二进制等边界数据。
  • 聚合层:对金额、数量、状态分组等业务字段执行 COUNTSUMMINMAX 或分组统计,比较两端结果。
  • 可用性层:在目标端执行典型查询,检查索引、约束及应用读取是否符合预期;异构迁移还需验证目标方言下的排序、大小写和日期行为。
抽样不是全量一致性证明:高风险迁移应结合行数、校验和、业务聚合和完整性约束进行多层核验。任何核验失败都应先暂停后续切换,再判断补传、重做或从备份恢复。

常见问题

1. 同一种数据库,为什么仍然出现字段或写入错误?

同构只表示数据库引擎相同,不代表版本、Schema、字符集、字段长度、默认值和约束一致。先比较两端表结构,再检查报错列的真实数据边界;必要时先修正目标结构或缩小到单表小批次重试。

2. 异构迁移的类型映射建议可以直接全部采用吗?

不建议。类型映射解决的是数据库类型兼容问题,不一定保留业务语义。例如数值精度、时区、自增、布尔值和空字符串处理都可能不同。应抽取包含边界值的数据试迁移,并让熟悉业务字段的人确认目标结果。

3. 目标表已经有数据,如何避免重复或覆盖?

先停止执行并确认当前面板提供的目标写入选项。追加前检查主键和唯一键冲突;清空后写入或重建前必须备份。不要假设数据传输会自动 Upsert 或去重,如需合并,应先制定明确的键匹配和冲突处理规则。

4. 任务显示完成,但源端和目标端行数不同怎么办?

先确认两次统计是否处于同一时间点,以及源端是否仍在写入。然后按表查看任务结果,核对过滤范围、失败批次、约束冲突与权限错误;用主键区间和聚合查询缩小缺口。未解释差异前不要切换业务流量。

5. 批次越大是否一定越快?

不一定。大批次可能提高吞吐,也可能增加事务日志、锁等待、内存压力和失败后的重试成本。先用小批次测量目标库负载,再逐步增大;出现超时、锁等待或日志空间压力时应减小批次并拆分大表。

6. 迁移失败后能否在工具里一键回滚?

不要依赖这一假设。任务状态不能替代数据库恢复能力,可靠回滚依赖用户在写入前创建并验证的备份或快照。失败后先停止后续任务、保留日志与核验结果,再按数据库恢复流程还原并复查基线。