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

MySQL 大量數據導入實戰:LOAD DATA INFILE 參數詳解與常見坑位避雷

     編輯:MySQL 資料庫相關知識

LOAD DATA INFILE 完整語法

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_path'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name ...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
    [TERMINATED BY '\t']
    [[OPTIONALLY] ENCLOSED BY '']
    [ESCAPED BY '\\']
]
[LINES
    [STARTING BY '']
    [TERMINATED BY '\n']
]
[IGNORE number LINES]
[(col_name_or_user_var, ...)]
[SET col_name = expr, ...]

關鍵參數對照表

子句預設值說明常用場景
FIELDS TERMINATED BY\t (Tab)欄位分隔符CSV 用 ',',自定義用 '|' 等
ENCLOSED BY空 (無包裹)欄位包裹字符 (如雙引號)CSV 標準 '"'"'",含分隔符/換行的欄位必須包裹
ESCAPED BY\\轉義字符關閉轉義用 ESCAPED BY ''
LINES TERMINATED BY\n行結束符Windows 檔案用 '\r\n'
IGNORE n LINES0跳過前 n 行 (如標題行)IGNORE 1 LINES
LOCAL無從客戶端讀取文件文件在應用伺服器、非 DB 伺服器時必加
REPLACE / IGNORE錯誤停止主鍵/唯一鍵衝突處理REPLACE 覆蓋,IGNORE 跳過

文件路徑解析規則 (無 LOCAL 時,服務端讀取)

  1. 相對路徑 ./data.txt → 相對於 datadir
  2. 無路徑 data.txt → 相對於當前資料庫目錄 (datadir/db_name/)
  3. 絕對路徑 /var/lib/mysql-files/data.txt → 直接讀取 (需 secure_file_priv 允許)

實戰範例:標準 CSV 導入

LOAD DATA LOCAL INFILE '/tmp/users.csv'
INTO TABLE `users`
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(`id`, `username`, `email`, `created_at`);

導出對應:SELECT ... INTO OUTFILE

SELECT `id`, `username`, `email`, `created_at`
FROM `users`
INTO OUTFILE '/tmp/users_export.csv'
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n';

原則:導出與導入的 FIELDS/LINES 參數**必須完全一致**,否則解析錯誤。

常見錯誤與解決

錯誤原因解決
Data truncation: Data truncated for column 'id' at row 3數據超出欄位定義長度/類型檢查 CSV 欄位順序、類型匹配、ENCLOSED BY 是否正確
File not found (Errcode: 2)路徑錯誤或 secure_file_priv 限制用 SHOW VARIABLES LIKE 'secure_file_priv'; 查看允許目錄,或用 LOCAL
Access denied (Errcode: 13)文件系統權限不足確保 mysql 進程用戶可讀文件/目錄
亂碼字符集不匹配導出/導入雙方同加 CHARACTER SET utf8mb4
行數不對欄位含換行符未包裹導出時加 OPTIONALLY ENCLOSED BY '"'"'",導入同樣

效能優化建議

  • 關閉索引:導入前 DROP INDEX,導入後 ADD INDEX (見文章 89232)
  • 調大緩衝:bulk_insert_buffer_size (MyISAM) / innodb_log_file_size (InnoDB)
  • 禁用外鍵/唯一檢查:SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; 導入後恢復
  • 分區表並行導入:按分區拆分文件,多線程導入
  • 使用 mydumper/myloader:並行、壓縮、斷點續傳,大庫首選

安全提醒

  • secure_file_priv 限制導入導出目錄,防止任意文件讀寫。
  • LOCAL 選項需客戶端支援 (--local-infile=1) 且服務端 local_infile=ON。
  • 生產環境嚴禁直接導入未驗證的外部文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved