MySQL 数据库迁移是将数据从一个数据库环境转移到另一个的过程,常见场景包括服务器迁移、版本升级、架构调整等。以下是常用的迁移方法和步骤:
mysqldump
是 MySQL 自带的备份工具,可生成 SQL 脚本实现迁移。
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
mysqldump -u root -p mydb > mydb_backup.sql
mysqldump -u 用户名 -p 数据库名 表1 表2 > 备份文件.sql
mysqldump -u 用户名 -p -d 数据库名 > 结构备份.sql
在目标服务器上执行:
mysql -u 用户名 -p -e "CREATE DATABASE IF NOT EXISTS 数据库名;"
mysql -u 用户名 -p 数据库名 < 备份文件.sql
MySQL 数据以文件形式存储(如.frm
、.ibd
等),适合同版本、同存储引擎(如 InnoDB)的快速迁移。
-
停止源数据库和目标数据库服务
-
复制数据文件
-
找到数据目录(通常在
/var/lib/mysql/
或my.cnf
中datadir
配置)
-
复制整个数据库文件夹到目标服务器的相同目录
cp -r /var/lib/mysql/源数据库名 /目标服务器数据目录/
-
修复文件权限
chown -R mysql:mysql /目标服务器数据目录/源数据库名
-
启动数据库服务
适合非命令行用户,常用工具:
-
Navicat:
-
右键源数据库 → "转储 SQL 文件" → 导出结构和数据
-
在目标数据库 → "运行 SQL 文件" → 选择导出的脚本
-
MySQL Workbench:
-
菜单栏 → Server → Data Export → 选择数据库导出
-
目标服务器 → Server → Data Import → 导入备份文件
-
版本兼容性:
-
低版本→高版本:通常直接迁移即可
-
高版本→低版本:需使用
--compatible
参数生成兼容脚本
mysqldump -u 用户名 -p --compatible=mysql40 数据库名 > 兼容脚本.sql
-
字符集问题:
-
确保源和目标数据库字符集一致(如
utf8mb4
)
-
迁移后检查:
SHOW VARIABLES LIKE 'character_set_database';
-
存储引擎差异:
-
若目标库不支持某些引擎(如
MyISAM
→InnoDB
),需提前转换
ALTER TABLE 表名 ENGINE=InnoDB;
-
大数据库迁移优化:
-
压缩导出:
mysqldump ... | gzip > 备份文件.sql.gz
-
分表导出:避免单文件过大
-
使用
--skip-extended-insert
减少单条 SQL 长度(适合大表)
-
检查记录数是否一致:
-
验证关键表结构:
-
测试业务功能:确保应用程序能正常读写新数据库。
根据数据量大小和迁移场景选择合适的方法,中小规模数据库推荐mysqldump
,超大型数据库可考虑分库分表迁移或使用专业迁移工具(如 Percona XtraBackup)。