1. 逻辑迁移:使用mysqldump工具(通用场景首选)
逻辑迁移通过导出SQL脚本实现,适用于大多数场景(尤其是中小型数据库)。操作步骤:① 在源服务器上使用mysqldump -u [用户名] -p[密码] [数据库名] > backup.sql
导出数据库(注意-p
与密码无空格);② 通过scp backup.sql user@target_server:/path/to/destination
将备份文件传输至目标服务器;③ 在目标服务器上创建同名数据库(mysql -u [用户名] -p -e "CREATE DATABASE [数据库名];"
),并执行mysql -u [用户名] -p[数据库名] < backup.sql
导入数据。此方法兼容性好,但大型数据库(如TB级)迁移时间较长。
2. 物理迁移:使用xtrabackup工具(大规模数据库高效方案)
物理迁移直接复制数据库物理文件,速度快于逻辑迁移,适合TB级以上数据。操作步骤:① 在源服务器安装Percona XtraBackup(sudo apt-get install percona-xtrabackup-24
);② 执行热备份(不锁表):xtrabackup --backup --user=[用户名] --password=[密码] --target-dir=/path/to/backup
;③ 将备份目录复制到目标服务器(scp -r /path/to/backup user@target_server:/path/to/destination
);④ 在目标服务器预处理备份(xtrabackup --prepare --target-dir=/path/to/destination
);⑤ 恢复数据(xtrabackup --copy-back --target-dir=/path/to/destination --datadir=/var/lib/mysql
);⑥ 重启MySQL服务(sudo systemctl restart mysql
)。需确保源、目标服务器MySQL版本兼容。
3. 物理迁移:使用rsync复制数据目录(Debian特有便捷方式)
针对Debian系统,可直接复制MySQL默认数据目录(/var/lib/mysql
),适用于版本升级或同架构迁移。操作步骤:① 停止源服务器MySQL服务(sudo systemctl stop mysql
);② 使用rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /var/lib/mysql/ user@target_server:/var/lib/mysql/
同步数据(排除无关目录);③ 在目标服务器修改MySQL配置文件(/etc/mysql/my.cnf
),确认datadir
路径为/var/lib/mysql
;④ 启动目标服务器MySQL服务(sudo systemctl start mysql
)。此方法无需导出导入,速度快,但需停机操作。
4. 性能优化:分批迁移大型表(减少资源占用)
对于包含百万级行的大表,分批迁移可降低内存、磁盘I/O压力。操作示例:INSERT INTO target_table SELECT * FROM source_table WHERE id BETWEEN 1 AND 1000000;
(按ID范围分批),或使用LIMIT
子句(INSERT INTO target_table SELECT * FROM source_table LIMIT 1000000 OFFSET 0;
)。每批迁移后暂停一段时间,避免源数据库过载。
5. 性能优化:禁用索引和外键约束(加速数据导入)
迁移前禁用目标表的索引(如普通索引、唯一索引)和外键约束,迁移完成后再重新启用,可减少插入时的索引维护开销。操作步骤:① 禁用索引:ALTER TABLE target_table DISABLE KEYS;
;② 执行数据迁移(如mysqlimport
或INSERT INTO ... SELECT
);③ 启用索引:ALTER TABLE target_table ENABLE KEYS;
。外键约束禁用命令:SET FOREIGN_KEY_CHECKS = 0;
,启用:SET FOREIGN_KEY_CHECKS = 1;
。
6. 性能优化:调整MySQL配置参数(提升迁移速度)
通过调整MySQL参数优化迁移性能,常见参数设置:① 增大InnoDB缓冲池大小(innodb_buffer_pool_size
,建议设为物理内存的50%-70%,如SET GLOBAL innodb_buffer_pool_size = 2G;
);② 增大允许的最大数据包大小(max_allowed_packet
,避免大对象迁移失败,如SET GLOBAL max_allowed_packet = 64M;
);③ 增大批量插入缓冲区大小(bulk_insert_buffer_size
,提升批量插入速度,如SET GLOBAL bulk_insert_buffer_size = 64M;
)。修改后需重启MySQL生效。
7. 性能优化:使用高效迁移工具(替代传统方法)
传统mysqldump
+mysql
组合适合小数据量,大数据量推荐以下工具:① mydumper/myloader
(并行导出导入,速度比mysqldump
快3-5倍,支持多线程);② pt-archiver
(Percona工具,支持增量迁移和数据归档);③ 第三方图形化工具(如MySQL Workbench、DBeaver),提供可视化操作和数据一致性校验功能。
8. 迁移验证:确保数据一致性与完整性
迁移完成后,必须进行严格验证:① 检查数据库数量(SHOW DATABASES;
);② 检查表数量(USE [数据库名]; SHOW TABLES;
);③ 抽样数据核对(SELECT COUNT(*) FROM [表名];
对比源、目标库行数;SELECT * FROM [表名] LIMIT 10;
对比数据内容);④ 检查索引和外键约束(SHOW INDEX FROM [表名];
、SHOW CREATE TABLE [表名];
确认索引是否存在;SELECT @@FOREIGN_KEY_CHECKS;
确认外键约束是否启用)。