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

MySQL 批次處理與 LOAD DATA INFILE:從腳本檔、日誌檔到極速匯入實戰

     編輯:MySQL 資料庫相關知識

批次模式讓 MySQL 非互動式執行 SQL 腳本;LOAD DATA INFILE 則是極速大量匯入的核心利器。兩者結合,可實現從日誌回放、異構遷移到 ETL 落地的全鏈路自動化。

一、批次處理模式

1. 準備 SQL 腳本檔(New_Data.sql)

USE Meet_A_Geek;
INSERT INTO Customers (Customer_ID, Last_Name) VALUES (NULL, "Block");
INSERT INTO Customers (Customer_ID, Last_Name) VALUES (NULL, "Newton");
INSERT INTO Customers (Customer_ID, Last_Name) VALUES (NULL, "Simmons");
  • 每句以分號結尾,語法必須正確。
  • 可直接用現有資料庫的 General Log / Binlog 提取 SQL,免去手寫。

2. 執行批次

# Linux/macOS
mysql -u root -p < /home/mark/New_Data.sql

# Windows CMD
mysql -u root -p < C:\scripts\New_Data.sql

輸入密碼後自動執行,錯誤會輸出至 STDERR。

二、LOAD DATA INFILE 極速匯入

基本語法

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

關鍵參數實戰

參數場景範例
LOCAL檔案在客戶端,經網路傳給伺服器LOAD DATA LOCAL INFILE 'C:/data.txt' INTO TABLE t;
LOW_PRIORITY等待無讀鎖時才寫入,降低對線上查詢影響LOAD DATA LOW_PRIORITY INFILE '/data.txt' INTO TABLE t;
REPLACE主鍵/唯一鍵衝突時覆蓋舊行LOAD DATA REPLACE INFILE '/data.txt' INTO TABLE t;
IGNORE衝突時跳過新行,保留舊行LOAD DATA IGNORE INFILE '/data.txt' INTO TABLE t;
FIELDS TERMINATED BY ',' ENCLOSED BY '"'CSV 格式LOAD DATA INFILE '/data.csv' INTO TABLE t FIELDS TERMINATED BY ',' ENCLOSED BY '"';
(col1, col3, col5)只匯入指定欄位,順序對應檔案欄位LOAD DATA INFILE '/data.txt' INTO TABLE t (id, name, email);

進階技巧:配合用戶變數做轉換

LOAD DATA INFILE '/raw.log' INTO TABLE logs
  (@ts, @level, message)
  SET created_at = STR_TO_DATE(@ts, '%Y-%m-%d %H:%i:%s'),
      level = UPPER(@level);

三、從 Access 遷移到 MySQL 實戰

  1. Access 導出 CSV(含表頭)。
  2. MySQL 建表,欄位順序與 CSV 一致。
  3. LOAD DATA LOCAL INFILE 'access_export.csv' INTO TABLE target FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 LINES;
  4. 若 MySQL 表多出欄位,用 (col1, col2, ...) 指定對應關係。

四、效能調優清單

  • 匯入前 SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 匯入後恢復並 COMMIT;
  • 大表分批次 COMMIT,避免 Undo Log 膨脹。
  • 使用 --local-infile=1 啟用客戶端 LOCAL 功能(伺服端亦需 local_infile=ON)。
  • 檔案編碼與 CHARACTER SET 參數一致(建議 UTF-8)。

掌握批次與 LOAD DATA,讓 TB 級資料遷移也能在維護窗口內從容完成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved