一、数据迁移概述
MySQL数据迁移是将数据从源服务器转移到目标服务器的过程。
二、迁移前准备
2.1 检查数据量
SELECT table_name, table_rows, data_length
FROM information_schema.tables
WHERE table_schema = 'mydb';
2.2 确认版本兼容
mysql -V
三、mysqldump方式
3.1 导出全部数据库
mysqldump -u root -p --all-databases > all_backup.sql
3.2 导出指定数据库
mysqldump -u root -p --databases mydb > mydb_backup.sql
3.3 导入数据
mysql -u root -p < all_backup.sql
四、主从复制迁移
4.1 配置主服务器
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 1
log_bin = mysql-bin
4.2 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
4.3 配置从服务器
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
START SLAVE;
五、热迁移(零停机)
5.1 使用pt-online-schema-change
pt-online-schema-change --alter "ENGINE=InnoDB" D=mydb,t=users
5.2 双写方案
先配置主从同步,确认数据一致后切换流量。
六、表空间迁移
FLUSH TABLES mydb.users FOR EXPORT;
-- 拷贝.ibd文件到目标服务器
ALTER TABLE mydb.users IMPORT TABLESPACE;
七、云平台迁移工具
7.1 AWS DMS
配置源端和目标端连接,选择迁移任务类型。
7.2 云厂商导入导出
使用云控制台的数据导入功能上传备份文件。
八、迁移验证
SELECT COUNT(*) FROM users;
CHECKSUM TABLE users;
九、回滚方案
保留源数据库备份至少7天,确认无问题后再清理。
十、常见问题
Q1:字符集不匹配?
统一使用utf8mb4编码。
Q2:大表迁移慢?
分批次导出,使用WHERE条件分段。
Q3:外键约束报错?
临时禁用外键检查。
十一、总结
选择合适迁移方案,做好备份和验证。
注:本文基于2026年Ubuntu 22.04 / MySQL 8.0编写