在服务器升级、业务扩容或者机房迁移等场景下,将mysql中的数据迁移到新服务器是运维人员经常需要处理的任务,选择合适的迁移方案可以最大程度降低数据丢失风险和业务中断时间。

常用mysql数据迁移方案
1. 逻辑备份迁移(mysqldump方式)
这种方式适合数据量较小(通常建议10G以内)的场景,操作相对简单,兼容性较好,支持跨版本迁移。
操作步骤
首先在原服务器上执行备份命令,导出所有需要迁移的数据库数据:
# 导出单个数据库,替换db_name为实际数据库名 mysqldump -u root -p --databases db_name > /tmp/db_backup.sql # 导出所有数据库 mysqldump -u root -p --all-databases > /tmp/all_db_backup.sql
将备份文件传输到新服务器,可以使用scp命令:
scp /tmp/db_backup.sql root@新服务器IP:/tmp/
然后在新服务器上执行导入命令,完成数据恢复:
mysql -u root -p < /tmp/db_backup.sql
注意事项
- 备份时建议添加
--single-transaction参数,避免锁表影响业务写入 - 如果数据量较大,可以结合
--compress参数压缩备份文件,减少传输时间 - 导入前需要确认新服务器的mysql版本兼容备份文件的语法
2. 物理文件迁移
这种方式适合数据量较大、对迁移效率要求高的场景,直接拷贝mysql的数据目录文件,迁移速度远快于逻辑备份。
操作步骤
首先停止原服务器的mysql服务,避免数据写入导致文件不一致:
systemctl stop mysqld
找到mysql的数据目录,默认路径通常为/var/lib/mysql,将整个目录打包传输到新服务器:
tar -czf /tmp/mysql_data.tar.gz /var/lib/mysql scp /tmp/mysql_data.tar.gz root@新服务器IP:/tmp/
新服务器停止mysql服务后,解压文件到对应的数据目录,注意修改文件权限:
systemctl stop mysqld rm -rf /var/lib/mysql/* tar -xzf /tmp/mysql_data.tar.gz -C /var/lib/ chown -R mysql:mysql /var/lib/mysql systemctl start mysqld
注意事项
- 原服务器和新服务器的mysql版本需要完全一致,否则可能出现兼容性问题
- 迁移前需要确认新服务器的数据目录路径和原服务器一致,或者修改mysql配置文件中的
datadir参数 - 如果原服务器开启了binlog,需要同时拷贝binlog文件保证数据完整性
3. 主从复制迁移
这种方式适合对业务中断时间要求极低的场景,通过搭建主从架构,待数据同步完成后再切换业务,几乎可以实现无感知迁移。
操作步骤
首先在新服务器上部署相同版本的mysql,修改配置文件开启binlog,然后重启服务:
# 新服务器mysql配置文件添加以下内容 [mysqld] server-id=2 log-bin=mysql-bin relay-log=relay-bin
在原服务器上创建用于主从复制的账号,并授权:
CREATE USER 'repl'@'新服务器IP' IDENTIFIED BY 'repl_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'新服务器IP'; FLUSH PRIVILEGES;
查看原服务器的binlog状态,记录文件名和位置:
SHOW MASTER STATUS;
在新服务器上配置主从同步,指向原服务器的binlog信息:
CHANGE MASTER TO MASTER_HOST='原服务器IP', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='记录的binlog文件名', MASTER_LOG_POS=记录的位置; START SLAVE;
等待数据同步完成后,停止原服务器的业务写入,确认新服务器数据同步无延迟,再将业务连接切换到新服务器即可。
注意事项
- 主从服务器的server-id必须唯一,不能重复
- 同步过程中需要监控从服务器的
Slave_IO_Running和Slave_SQL_Running状态,确保都是Yes - 切换业务前需要验证新服务器的数据完整性和业务可用性
迁移后验证
无论使用哪种迁移方式,迁移完成后都需要做基础验证:
- 检查新服务器的数据库数量、表数量是否和原服务器一致
- 随机抽取几张表,对比数据行数和关键数据是否一致
- 测试业务的增删改查功能是否正常,确认没有异常报错
数据迁移属于高风险操作,建议迁移前先对原服务器的数据进行完整备份,避免迁移失败导致数据丢失。