>Linux MySQL数据迁移完全指南:5种方法详解 (2026)
在Linux服务器运维中,MySQL数据库迁移是最常见的操作之一。无论是因为服务器升级、机房更换还是数据备份,掌握多种MySQL数据迁移方法都是运维人员的必备技能。本文详细介绍5种主流迁移方案,帮助你选择最适合实际场景的方法。
—
>方法一:使用mysqldump逻辑导出导入
mysqldump是最经典的MySQL数据迁移工具,适用于中小型数据库的跨版本迁移。
>基本语法
在源服务器上导出数据:
>mysqldump -u root -p --single-transaction --routines --triggers --events --all-databases > all_databases.sql
在目标服务器上导入数据:
>mysql -u root -p < all_databases.sql
核心参数说明
>
- --single-transaction:InnoDB引擎推荐使用,保证数据一致性且不锁表
- --routines:包含存储过程和函数
- --triggers:包含触发器
- --events:包含定时事件
- --quick:大表导出时避免内存溢出
>优缺点
优点是兼容性强,可跨版本、跨平台迁移。缺点是速度较慢,对于百GB级别的数据库可能需要数小时甚至更长时间。
---
>方法二:使用mysqlhotcopy物理备份
mysqlhotcopy适用于MyISAM引擎的快速物理备份迁移。
>基本用法
>mysqlhotcopy -u root -p 数据库名 /tmp/backup/
注意事项
仅支持MyISAM和ARCHIVE引擎
需要文件系统级别的权限
迁移时需锁定表,生产环境慎用
在MySQL 8.0中已被移除,仅适用于旧版本
---
>方法三:直接复制数据文件
对于大规模数据库,直接复制MySQL的数据目录是最快的方式。
>操作步骤
1. 停止MySQL服务:systemctl stop mysqld
2. 打包数据目录:tar czf mysql_data.tar.gz /var/lib/mysql/
3. 传输到目标服务器
4. 解压并设置权限:chown -R mysql:mysql /var/lib/mysql/
5. 启动MySQL服务:systemctl start mysqld
>关键前提
源库和目标库的MySQL版本必须一致
操作系统架构需相同(同为x86_64)
字符集和排序规则需保持一致
迁移期间需要停机
---
>方法四:使用XtraBackup热备份
Percona XtraBackup是目前最优秀的MySQL热备份工具,支持InnoDB引擎的在线备份,无需停机。
>安装XtraBackup
>yum install percona-xtrabackup-80 # CentOS/RHEL
apt install percona-xtrabackup-80 # Ubuntu/Debian
全量备份与恢复
在源服务器执行全量备份:
>xtrabackup --backup --target-dir=/data/backup/ --user=root --password=yourpass
准备备份文件:
>xtrabackup --prepare --target-dir=/data/backup/
在目标服务器恢复:
>xtrabackup --copy-back --target-dir=/data/backup/ --datadir=/var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
增量备份
对于频繁迁移的场景,增量备份大幅缩短时间:
>xtrabackup --backup --target-dir=/data/inc1/ --incremental-basedir=/data/backup/
优势
在线热备份,不影响业务运行
支持增量备份,节省时间和存储空间
支持压缩和加密传输
兼容MySQL和MariaDB
---
>方法五:主从复制同步迁移
对于零停机迁移需求,主从复制是最理想的方案。
>实施步骤
1. 在目标服务器配置为从库
编辑目标服务器my.cnf,设置server-id:
>[mysqld]
server-id = 2
relay-log = /var/lib/mysql/relay-bin
log_slave_updates = 1
2. 在源服务器创建复制账号
>CREATE USER 'repl_user'@'目标IP' IDENTIFIED BY '强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'目标IP';
FLUSH PRIVILEGES;
3. 锁定源库并获取binlog位置
>FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
记录File和Position值。
4. 使用mysqldump导出数据
>mysqldump -u root -p --all-databases --master-data=2 > dump.sql
5. 在从库导入并启动复制
>mysql -u root -p < dump.sql
CHANGE MASTER TO MASTER_HOST='源IP', MASTER_USER='repl_user', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12345;
START SLAVE;
6. 验证同步状态
>SHOW SLAVE STATUS\G
确认Seconds_Behind_Master为0后,即可切换应用连接。
---
>迁移方案选择建议
小于1GB,允许短暂停机:推荐mysqldump
1-10GB,允许停机:推荐XtraBackup全量备份
10-100GB,需要热备份:推荐XtraBackup
大于100GB,零停机要求:推荐主从复制
MyISAM引擎,允许锁表:推荐mysqlhotcopy或文件复制
---
>迁移后的检查清单
完成数据迁移后,务必执行以下检查:
1. 数据完整性验证:对比源库和目标库的表数量和行数
2. 字符集检查:确认数据库和表的字符集配置正确
3. 应用连接测试:确保应用能正常连接并读写
4. 慢查询对比:检查迁移后是否出现新的慢查询
5. 存储空间:确认磁盘空间充足,预留30%以上余量
6. 定时备份:在目标服务器配置好自动备份策略
7. binlog清理:根据需求调整binlog保留策略
8. 防火墙规则:更新防火墙,关闭不必要的3306端口外部访问
---
>总结
MySQL数据迁移没有万能方案,选择合适的方法取决于数据规模、停机窗口和业务要求。对于大多数中小型项目,mysqldump配合--single-transaction参数是最省心的选择。对于生产环境的TB级数据库,XtraBackup热备份或主从复制是更可靠的方案。无论使用哪种方法,事前充分测试、事后认真验证都是不可或缺的环节。