首页/云/云平台与虚拟化速查/数据库迁移方法对比

数据库迁移方法对比

数据库迁移按实现分几类:停机导出导入、逻辑复制(binlog/CDC)、物理备份恢复、双写切换;窗口、数据量与一致性要求共同决定选型。

云平台与虚拟化速查云更新于 2026-10-13

数据库迁移方法

数据库迁移按实现分几类:停机导出导入、逻辑复制(binlog / CDC 增量同步)、物理备份恢复、应用双写切换。选型由三个约束共同决定——数据量、可接受的停机窗口,以及对一致性的要求;同一项目里不同库也常常用不同方法。

基本信息

导出导入实现最简单,停机窗口与数据量成正比
逻辑复制全量 + 增量 CDC,割接只停一小段时间
物理备份恢复同版本大库搬得快,跨版本通常不适用
双写切换需要应用改造,切换代价最小
一致性校验行数、校验值与业务对账三件套
回退手段切换后源库保留只读一段时间,问题出现可切回

方法对比

方法停机窗口适用与代价
导出导入与数据量成正比中小库、可停机业务;大库耗时超窗口
逻辑复制割接时间段持续变更的生产库;需盯住复制延迟
物理备份恢复恢复耗时窗口同版本大库快速搬迁;跨版本不适用
双写切换切换瞬间改造余地大的核心系统;要定义以哪边为准
版本约束视方法而定跨大版本迁移需先确认兼容性

典型使用场景

  • 中小库、可安排停机窗口:直接导出导入最省事
  • 生产库持续写入、窗口只有几分钟:用逻辑复制做增量
  • 同版本大库整体搬迁:物理备份恢复更快
  • 核心系统有改造能力:双写加灰度切换风险最小
  • 跨云或异构数据库:用厂商的数据传输服务做全量加增量

导出导入的基础命令

导出导入的基础命令
mysqldump --single-transaction --routines --triggers \
  --set-gtid-purged=OFF mydb > mydb.sql       # 一致性快照导出,尽量选低峰执行
mysql -h <目标> -u user -p mydb < mydb.sql     # 导入到目标库
mysqldump --single-transaction --databases a b --result-file=dump.sql   # 一次导出多个库
mysqladmin -h <目标> status                    # 导入后看写入与连接是否正常
# 增量阶段用 binlog 或 CDC 工具追平,切换前核对延迟与位点
--single-transaction 只对支持事务的引擎(如 InnoDB)给出一致性快照,非事务引擎仍会锁表;导出期间应避免长事务与 DDL,否则快照点会被拖后。
逻辑复制最关键的动作是盯延迟:增量追不平就不要切。切换完成后保留源库只读一段时间作为回退通道,别在切换当天就回收源库。

易错点

  • 大库用 mysqldump 导出:单线程耗时超出窗口,应评估并行或物理方案
  • 双写未定义以哪边为准:冲突处理策略缺失导致数据错乱
  • 增量延迟没追平就切库,切换后才发现少了一批写入
  • 跨大版本迁移未先验证兼容性,恢复或导入时报错才回头改方案

数据来源与参考

  • MySQL 8.0 Reference Manual:备份与恢复
  • 阿里云 DTS 迁移方案文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌