迁移大表数据需分批处理以降低影响,优先选用mysqldump分段导出、SELECT INTO OUTFILE结合LOAD DATA INFILE提升速度,或用pt-archiver实现低负载迁移,超大表可采影子表+双写方案确保不停服,全程避免锁表并监控资源。

迁移 MySQL 中的大表数据需要兼顾效率、稳定性和对线上服务的影响。直接使用常规的 INSERT 或 mysqldump 可能会导致锁表时间长、网络压力大或执行失败。以下是几种实用的方法和最佳实践。
适合跨服务器迁移,尤其是数据量在几 GB 到上百 GB 的场景。
操作建议:示例命令:
mysqldump -u user -p db_name big_table --single-transaction \ --where="id >= 1000000 AND id < 2000000" > part2.sql <p>mysql -u user -p target_db < part2.sql</p>
导入前可执行:
SET unique_checks=0; SET foreign_key_checks=0; SET autocommit=0;
这是最快的数据导出导入方式,适合同机或局域网内迁移。
关键点:示例:
-- 导出 SELECT * FROM big_table WHERE id BETWEEN 1000000 AND 1999999 INTO OUTFILE '/tmp/big_table_part2.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; <p>-- 导入 LOAD DATA INFILE '/tmp/big_table_part2.csv' INTO TABLE target_big_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';</p>
Percona Toolkit 中的 pt-archiver 支持高效、低影响地迁移或归档大表数据。
优势:示例:将数据从源表迁移到远程库
pt-archiver \ --source h=localhost,D=mydb,t=big_table \ --dest h=remote_host,D=mydb,t=big_table \ --where "create_time < '2023-01-01'" \ --limit 10000 \ --commit-each \ --progress 10000
对于超大表(TB级),推荐使用“影子表”方式逐步迁移,避免长时间锁表。
步骤:也可结合 gh-ost 或 pt-online-schema-change 实现无锁变更,这些工具内部采用类似机制。
基本上就这些方法。选择哪种取决于你的数据量、停机窗口、网络环境和是否允许短暂性能下降。关键是避免一次性操作,始终分批处理,监控资源使用。不复杂但容易忽略细节。
以上就是如何在mysql中迁移大表数据的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号