首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 高效導數據:LOAD DATA 並行導入實戰

     編輯:MySQL 資料庫相關知識

千萬級資料秒級導入:LOAD DATA 並行化策略

場景

  • 1 個庫、2000 張表、8600 萬總記錄
  • Linux 64bit、8G 內存、4 核

核心思路


mysql -u test -p xxxx -s -e "source load.sql"

load.sql 內包含大量 LOAD DATA 語句。

LOAD DATA 語法關鍵


LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\n';

並行衝突解決

策略適用場景操作
預清空全量覆蓋TRUNCATE TABLE 或 DELETE FROM
REPLACE主鍵衝突覆蓋LOAD DATA REPLACE ...
IGNORE主鍵衝突跳過LOAD DATA IGNORE ...

並行執行模式

  • 按表拆分:每表一個 .sql,Shell & 後台並行
  • 單表大文件拆分:split -l 100000 按行切分,多進程導入同表(需配合 IGNORE 或臨時表合併)
  • 控制併發數:xargs -P 4 或 GNU Parallel 限制並行度,避免 IO/CPU 打滿

效能優化參數


[mysqld]
innodb_buffer_pool_size = 6G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
bulk_insert_buffer_size = 256M  # MyISAM 專用

驗證清單

  • [ ] 行數核對:SELECT COUNT(*) vs 文件行數
  • [ ] 抽樣核對關鍵欄位
  • [ ] 索引完整性:ANALYZE TABLE
  • [ ] 導入後恢復 innodb_flush_log_at_trx_commit = 1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved