mysql 数据库迁移用什么工具_mysql常用工具库

6次阅读

mysqldump 是中小规模 MySQL 逻辑迁移首选工具,适用于 90% 场景;超千万行或跨库迁移时需替代方案;导出用 –single-transaction 等参数,导入前需建库。

mysql 数据库迁移用什么工具_mysql 常用工具库

mysqldump 是最常用、最轻量、最可控的 MySQL 迁移 工具,适合 90% 的中小规模逻辑迁移场景;但当数据量超千万行、或需跨数据库(如迁到 SQL Server / DM / Oracle)时,它就不够用了。

小数据量直接用 mysqldump + mysql 命令最稳

这是运维和开发最常写进脚本的方式,不依赖 GUI,可复现、可审计、无状态残留。

  • 导出结构 + 数据:
    mysqldump -h127.0.0.1 -P3306 -uroot -p'xxx' --single-transaction --routines --triggers testdb > testdb.sql
  • 导入前确保目标库存在:
    mysql -h127.0.0.1 -P3306 -uroot -p'xxx' -e "CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET utf8mb4;"
  • 再导入:
    mysql -h127.0.0.1 -P3306 -uroot -p'xxx' testdb 

⚠️ 注意:--single-transaction 对 InnoDB 有效,能避免锁表;但 MyISAM 表仍会锁,线上迁移务必确认存储引擎。另外,mysqldump 默认不导出用户权限,需要额外用 SELECT CONCAT('GRANT', ……) 手动拼。

大数据 量(500 万 + 行)优先选 mydumper/myloader

mysqldump 快 3–10 倍,核心优势是多线程 + 事务快照分离 + 表级并行。

  • 备份命令示例(跳过系统库,压缩,4 线程):
    mydumper -u root -p'xxx' -t4 --compress --regex'^(?!(mysql.|sys.|test.))' -o /backup/mydumper_out -v3
  • 恢复命令(自动建库建表,支持断点续传):
    myloader -u root -p'xxx' -t4 -d /backup/mydumper_out

⚠️ 注意:mydumper 不导出视图定义中的 DEFINER,导入后可能报 View 'xxx' references invalid table(s) or column(s);建议加 --skip-definer 参数。另外,它不处理外键约束顺序,大表间有强外键依赖时,要手动调整导入顺序或先关外键检查:SET FOREIGN_KEY_CHECKS=0;

跨数据库迁移(MySQL → SQL Server / DM / Oracle)别硬套 mysqldump

字段类型不兼容、SQL 语法差异、权限模型不同——直接导 SQL 再改,容易漏、难验证、上线就崩。

  • MySQL → SQL Server:用 微软 官方 SSMA for MySQL(SQL Server Migration Assistant),它能自动转换 TINYINT(1)BITDATETIME 时区处理、存储过程重写等,但注意它不迁移 EVENT 和自定义函数,需人工补全。
  • MySQL → 达梦 DM:用达梦自带的 DM 数据迁移工具,关键设置是「目的模式名全大写」+「保持对象名大小写」勾选与否要和源库严格一致,否则 SELECT * FROM user 可能变成 SELECT * FROM USER 报错。
  • MySQL → Oracle:Navicat Premium 可以直连两库拖表,但只适合少量表;生产环境推荐用 Oracle SQL Developer 的迁移向导(免费),它会生成 DDL 脚本供你审核。

⚠️ 所有跨库工具都默认不迁移 MySQL 的 user 表——除非你明确勾选「迁移权限信息」,否则新库的账号得重配。

云上迁移首选 腾讯 云 DTS 或 阿里云 DTS

不是因为它们“高级”,而是它们把最麻烦的事封装掉了:增量同步、断点续传、主从切换感知、DDL 同步拦截、数据一致性校验(抽样比对)。

  • 适用场景:停机窗口极短(
  • 关键配置项:全量迁移 + 增量迁移 必须同时开启; 迁移对象过滤 里记得取消勾选 mysql 系统库; 高级设置 中打开 忽略错误 要谨慎,比如 1062 Duplicate entry 可忽略,但 1146 Table doesn't exist 绝对不能忽略。

⚠️ DTS 迁移完成后,root 密码仍是源库密码——如果你在目标云数据库里提前创建了同名账号,它的密码不会被覆盖,必须手动重置。

真正卡住人的往往不是工具选错,而是没提前查清三件事:源库的 sql_mode(影响 GROUP BY 是否报错)、字符集是否含 utf8mb4(否则 emoji 存成 ?)、以及有没有用 JSON 字段或 Generated Column(老版本目标库根本不认)。这些细节,所有工具都不会主动提醒。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-31发表,共计1930字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources