大库迁移需分阶段操作、合理工具选型与严格校验机制。核心是减少锁表时间、保障数据一致性、控制资源消耗:按表或主键范围分批导出,用mydumper+myloader提升效率;通过binlog增量追平实现分钟级停写;跳过非核心对象加速过程;迁移后须行数核对、索引重建、权限同步。

大库迁移不是简单导出导入,核心是减少锁表时间、保障数据一致性、控制资源消耗。关键在分阶段操作+工具选型+校验机制。
分批次导出与并行导入
单次 mysqldump 全库会锁表太久,尤其有大表时。建议按表或按主键范围切分:
- 对大表(如超千万行)用 WHERE 条件分段导出,例如:
mysqldump -u user db table --where="id BETWEEN 1 AND 1000000" > table_p1.sql - 用 mydumper 替代 mysqldump:支持多线程导出、自动分片、压缩、断点续传,对大库更友好
- 导入侧用 myloader 并行还原,比单线程 source 快数倍;注意目标库 innodb_buffer_pool_size 要调大,避免频繁刷脏页
停写窗口内完成最终同步
业务无法长时间停服?那就控制“最终停写时间”在分钟级:
iTop代表IT运营门户。它是一个完整的开源和基于Web的IT服务管理平台,包括一个完全可定制的配置管理数据库(CMDB),一个帮助台系统和一个文档管理工具。它符合ITIL标准,并且由于大量的附加组件和Web服务,可以轻松定制和扩展以与您的IT集成。iTop还提供了批量导入工具,以帮助您更加高效。项目源代码已迁移到https://github.com/Combodo/iTop
- 先全量迁移(可在线进行),再基于 binlog 增量追平:用 mysqlbinlog + 过滤库表 或 Canal/Maxwell 抓取变更
- 在业务低峰期停写主库,记录当前 binlog 位点,把增量日志重放到新库,验证一致后切流
- 若主从延迟高,可在迁移前临时关闭从库 relay log 写入(
STOP SLAVE SQL_THREAD),仅 IO 线程拉日志,降低压力
跳过非核心对象,加速迁移过程
不是所有对象都要搬,节省时间和空间:
- 忽略统计信息:
--skip-events --skip-triggers --skip-routines(函数/存储过程可后续单独部署) - 不导出空表或历史归档表(提前确认业务是否仍依赖)
- 临时禁用外键检查:
SET FOREIGN_KEY_CHECKS=0;导入后再开启,避免插入失败
迁移后必须做的三件事
数据搬过去不等于成功,校验和优化缺一不可:
-
行数核对:用
SELECT COUNT(*)或 pt-table-checksum(推荐,支持分块校验、跨实例对比) -
索引重建:大表导入后可能索引失效或碎片严重,执行
OPTIMIZE TABLE或ALTER TABLE ... FORCE -
权限同步:mysqldump 不导用户,需手动用
SHOW CREATE USER和SHOW GRANTS补上
不复杂但容易忽略。重点不在“能不能搬”,而在“搬得稳不稳、切得顺不顺”。









