MySQL批量数据导入方法,解决大数据导入慢、出错问题

文章导读
使用LOAD DATA INFILE是MySQL中最快的批量导入方法,能显著提升大数据导入速度。基本语法:LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (col1,
📋 目录
  1. 方法一:LOAD DATA INFILE快速导入
  2. 解决慢速问题:调整MySQL配置参数
  3. 方法二:分批INSERT IGNORE
  4. 处理导入出错:数据清洗和日志监控
  5. 高级技巧:MySQL 8.0+并行导入
  6. 实战案例:10GB CSV导入优化
A A

使用LOAD DATA INFILE是MySQL中最快的批量导入方法,能显著提升大数据导入速度。基本语法:LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (col1, col2, col3); 这可以解决单条INSERT慢的问题,同时减少出错率。

方法一:LOAD DATA INFILE快速导入

LOAD DATA INFILE是MySQL官方推荐的批量导入方式,速度比INSERT快几十倍甚至上百倍。文件需放在服务器本地路径,或使用LOAD DATA LOCAL INFILE从客户端导入。注意权限:GRANT FILE ON *.* TO 'user'@'localhost'; 设置innodb_buffer_pool_size增大缓冲区,避免内存不足导致的导入中断。

解决慢速问题:调整MySQL配置参数

大数据导入慢的主要原因是事务日志过多和锁竞争。临时设置:SET GLOBAL innodb_flush_log_at_trx_commit=2; SET GLOBAL sync_binlog=0; SET GLOBAL innodb_doublewrite=0; 导入完成后恢复。禁用外键检查:SET FOREIGN_KEY_CHECKS=0; 禁用唯一索引检查:ALTER TABLE table_name DISABLE KEYS; 导入后:ALTER TABLE table_name ENABLE KEYS;

方法二:分批INSERT IGNORE

如果不能用LOAD DATA,可以用INSERT IGNORE INTO table_name VALUES (...),(...),(...); 每批1000-5000条,根据内存调整。使用事务包裹:START TRANSACTION; 每导入一定批次COMMIT; 出错时ROLLBACK重试。结合EXPLAIN分析查询计划,避免全表锁。

处理导入出错:数据清洗和日志监控

导入出错常见于数据格式不匹配或重复键。预先用awk/sed清洗CSV文件,确保字段一致。开启general_log查看错误SQL。使用REPLACE INTO代替INSERT处理重复数据。监控:SHOW PROCESSLIST; 检查长事务。

MySQL批量数据导入方法,解决大数据导入慢、出错问题

高级技巧:MySQL 8.0+并行导入

在MySQL 8.0,使用SET SESSION innodb_parallel_read_threads=4; 结合LOAD DATA多线程导入。分区表:ALTER TABLE table_name PARTITION BY RANGE (id); 分区导入避免全局锁。工具推荐:mysqlimport命令行工具,自动处理LOAD DATA。

实战案例:10GB CSV导入优化

实际测试,单机INSERT 1小时,LOAD DATA 5分钟。步骤:1.备份表结构;2.清空数据TRUNCATE TABLE;3.调参;4.LOAD DATA;5.重建索引。出错时,用--local-infile=1 mysqld启动允许本地导入。

FAQ
Q: LOAD DATA INFILE权限不足怎么办?
A: 执行GRANT FILE ON *.* TO 'user'@'localhost'; FLUSH PRIVILEGES;
Q: 导入中途出错如何恢复?
A: 用事务分批,或导入到临时表,再INSERT IGNORE到主表。
Q: CSV有特殊字符乱码?
A: 加CHARACTER SET utf8mb4到LOAD DATA语句,并确保文件BOM去除。
Q: 导入后索引重建慢?
A: 导入前DISABLE KEYS,结束后ENABLE KEYS自动优化。