亿级数据迁移涉及 网络带宽、延迟、断点续传、数据一致性 等多个问题。以下 10 个案例,涵盖 全量迁移、增量同步、压缩优化、带宽限制 等策略,确保数据高效、安全迁移。


1. 使用 MySQL Parallel Dump 进行多线程并行导出

问题:
单线程 mysqldump 速度过慢,导致 10 亿级数据迁移时间超过 10 小时。

优化方案:

  • 使用 mydumper 进行多线程导出:
    mydumper -u root -p password -h source_host -B mydb -o /backup -t 8 --compress
    
  • 使用 myloader 并行导入目标数据库:
    myloader -u root -p password -h target_host -B mydb -d /backup -t 8
    

效果: 迁移时间从 10 小时缩短至 2 小时。


2. 利用 GTID + Replication 进行增量同步

问题:
全量迁移期间 业务仍在运行,导致数据不一致。

优化方案:

  • 先使用 mysqldump --single-transaction 进行全量备份。
  • 然后基于 GTID(全局事务 ID)搭建复制:
    CHANGE MASTER TO MASTER_HOST='source', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;
    
  • 数据迁移完成后,切换到新库。

效果: 实现无缝切换,业务零中断。


3. 使用 DataX 进行大规模数据同步

问题:
MySQL 与 Hadoop、ClickHouse 之间数据量大,传统 INSERT INTO SELECT 方式 占用大量带宽。

优化方案:

  • 使用阿里巴巴 DataX(支持多源同步):
    {
      "job": {
        "content": [
          {
            "reader": { "name": "mysqlreader", ... },
            "writer": { "name": "hdfswriter", ... }
          }
        ]
      }
    }
    
  • 支持 JDBC 并行查询,加快迁移速度。

效果: 迁移时间从 4 小时降低至 30 分钟。


4. rsync 结合 网速优化

问题:
跨 IDC 迁移 TB 级 CSV 文件,网络带宽瓶颈 限制速度。

优化方案:

  • 开启 rsync 压缩传输:
    rsync -avzP --bwlimit=50000 source_dir/ target:/backup/
    
  • 使用 iperf3 测试网络带宽,调整 TCP 窗口大小:
    iperf3 -c target_host -w 512K -P 10
    
  • 改用 BBR 拥塞控制算法:
    sysctl -w net.core.default_qdisc=fq
    sysctl -w net.ipv4.tcp_congestion_control=bbr
    

效果: 传输速度 提高 3 倍。


5. Kafka + Debezium 实现增量数据同步

问题:
跨机房迁移 MySQL 数据,网络不稳定,导致长时间全量迁移失败。

优化方案:

  • 利用 Debezium 监听 MySQL binlog,同步增量数据到 Kafka:
    {
      "name": "inventory-connector",
      "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "database.hostname": "source_host",
        "database.port": "3306",
        "database.user": "user",
        "database.password": "password",
        "database.include.list": "mydb",
        "database.server.id": "1",
        "database.server.name": "db1"
      }
    }
    
  • 目标数据库消费 Kafka 数据,并落盘。

效果: 实现 秒级增量同步,网络中断后 自动恢复。


6. LZ4 压缩降低传输时间

问题:
100GB MySQL 数据导出后,传输慢。

优化方案:

  • 使用 LZ4 进行超快速压缩:
    mysqldump -u root -p mydb | lz4 -9 > backup.sql.lz4
    
  • 传输后解压并恢复:
    lz4 -d backup.sql.lz4 | mysql -u root -p mydb
    

效果: 数据大小减少 80%,传输时间缩短 5 倍。


7. S3 + Multipart Upload 进行分块上传

问题:
亿级数据迁移到 AWS S3,单次上传失败后无法续传。

优化方案:

  • 使用 AWS S3 Multipart Upload,支持断点续传:
    aws s3 cp bigfile.csv s3://mybucket/ --storage-class STANDARD_IA --sse
    

效果: 传输速度 提高 3 倍,支持断点续传。


8. 使用 ClickHouse 替代 MySQL 存储历史数据

问题:
MySQL InnoDB 存储成本高,查询慢,迁移到 ClickHouse 避免索引瓶颈。

优化方案:

  • 先用 SELECT INTO OUTFILE 导出数据:
    SELECT * INTO OUTFILE '/tmp/data.csv' FIELDS TERMINATED BY ',' FROM mydb;
    
  • 使用 ClickHouse 并行 INSERT 导入:
    clickhouse-client --query="INSERT INTO my_table FORMAT CSV" < /tmp/data.csv
    

效果: 存储成本降低 10 倍,查询速度提升 100 倍。


9. Migrate From MySQL to PostgreSQL 并行迁移

问题:
迁移 MySQL 到 PostgreSQL 时,pgloader 单线程太慢。

优化方案:

  • 使用 pgloader 并行导入:
    pgloader mysql://user:pass@source/db postgresql://user:pass@target/db
    

效果: 迁移时间 从 6 小时减少到 1 小时。


10. Percona XtraBackup 进行在线迁移

问题:
业务不能停机,mysqldump 导出慢,影响性能。

优化方案:

  • 使用 XtraBackup 进行非锁定备份:
    xtrabackup --backup --target-dir=/backup
    xtrabackup --prepare --target-dir=/backup
    
  • 拷贝到新服务器后,直接恢复:
    xtrabackup --copy-back --target-dir=/backup
    

效果: 业务零停机,迁移速度提升 10 倍。


总结

  • 多线程导出导入 (mydumper)
  • 增量同步 (GTID / Debezium)
  • 网络优化 (rsync / BBR)
  • 数据压缩 (LZ4)
  • 分布式存储 (S3 / ClickHouse)
  • 非锁定备份 (XtraBackup)

你当前的数据迁移场景是哪个?可以针对性优化。

更多推荐