✅ 常见场景分类
场景 | 示例 |
---|---|
本地迁移 | 从本机 MySQL5.7 升级到 MySQL8.0 |
跨服务器迁移 | 从 A 服务器迁移到 B(新服务器) |
跨架构迁移 | 原数据库和目标数据库结构不同 |
实时同步 | 需要边迁移边持续运行业务 |
🧩 方法 1:使用 mysqldump
(通用、最稳妥)
🛠️ 导出数据(在源数据库执行)
mysqldump -u root -p --databases db1 db2 > backup.sql
✅ 如果只要某个表:
mysqldump -u root -p db1 table1 > table1.sql
如果要保留数据、结构、触发器等全部信息:
mysqldump -u root -p --routines --triggers --single-transaction --quick --databases db1 > full_backup.sql
🛠️ 导入数据(在目标数据库执行)
mysql -u root -p < backup.sql
或者指定数据库导入:
mysql -u root -p db1 < backup.sql
🧩 方法 2:使用 scp
+ mysqldump
跨服务器迁移
步骤:
A服务器执行:
mysqldump -u root -p db1 > db1.sql
拷贝到B服务器:
scp db1.sql user@target_ip:/path
B服务器导入:
mysql -u root -p db1 < db1.sql
🧩 方法 3:使用 mysqlpump
(并行版 mysqldump,效率更高)
mysqlpump -u root -p db1 > db1_pump.sql
mysql -u root -p < db1_pump.sql
🧩 方法 4:使用 Percona Xtrabackup
(适合大型热备)
适用于大数据量热迁移(如 10GB+),能在不中断服务的情况下进行热备份。
# 安装 percona-xtrabackup
# 备份数据
xtrabackup --backup --target-dir=/backup --datadir=/var/lib/mysql
# 恢复数据
xtrabackup --prepare --target-dir=/backup
xtrabackup --copy-back --target-dir=/backup
🧩 方法 5:Navicat 等 GUI 工具迁移
如果你用的是 Navicat、DBeaver、DataGrip 之类客户端工具,支持:
- 数据库结构克隆
- 表数据右键 -> 导出或迁移
- 可视化同步、对比结构差异
适合轻量迁移和部分数据迁移操作。
🧩 方法 6:使用 binlog 实时同步(高级)
适用于不停服迁移数据到新环境、测试数据复制等。
✅ 迁移注意事项
注意项 | 建议 |
---|---|
✅ 迁移前备份 | 所有原始数据都应备份 |
✅ 字符集统一 | 确保目标库字符集一致(如 UTF8MB4) |
✅ 主键、索引是否兼容 | MySQL 不同版本可能处理方式不同 |
✅ 迁移后验证数据量一致 | select count(*) from xxx 检查是否一致 |
✅ 开启 foreign_key_checks = 0 (可选) |
如果导入时报外键错误,可关闭 |
✅ 示例一键脚本(推荐用)
# 备份
mysqldump -u root -pYourPassword --databases your_db > your_db.sql
# 拷贝(如果是远程)
scp your_db.sql root@your_ip:/root/
# 登录远程服务器后导入
mysql -u root -pYourPassword < your_db.sql