Linux MySQL数据迁移完全指南:5种方法详解 (2026)

>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热备份或主从复制是更可靠的方案。无论使用哪种方法,事前充分测试、事后认真验证都是不可或缺的环节。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注