mysqlimport 位於 MySQL/bin 目錄,是 MySQL 官方提供的高效文本數據導入工具,底層封裝 LOAD DATA INFILE。適合批量導入 CSV、TSV 等結構化文本文件。
mysqlimport [options] database_name textfile1 [textfile2 ...]
database_name:目標數據庫textfile:文件名(不含路徑)即為表名,第一個點號前的部分作為表名Customers.txt → 導入 Customers 表Cus.to.mers.txt → 導入 Cus 表| 短參數 | 長參數 | 功能 |
|---|---|---|
| -d | --delete | 導入前清空目標表所有數據 |
| -f | --force | 遇錯繼續,不中斷導入 |
| -i | --ignore | 跳過唯一鍵衝突行(保留舊數據) |
| -l | --lock-tables | 導入前鎖表,防止併發讀寫干擾 |
| -r | --replace | 唯一鍵衝突時用新數據覆蓋舊行(與 -i 互斥) |
| --fields-enclosed-by=char | 字段包裹字符(如雙引號 \"),默認無 | |
| --fields-terminated-by=char | 字段分隔符,默認 Tab (\t) | |
| --lines-terminated-by=str | 行分隔符,默認換行符 (\n) | |
| -v | --verbose | 顯示詳細進度信息 |
| -p | --password[=pwd] | 提示/指定密碼 |
文件 Orders.txt 內容(雙引號包裹、逗號分隔、換行結尾):
"1", "ORD89876", "1 Dozen Roses", "19991226"
"2", "ORD89877", "2 Dozen Tulips", "19991227"
導入命令:
mysqlimport --password --replace --lock-tables \
--fields-enclosed-by="\"" \
--fields-terminated-by=, \
--lines-terminated-by="\r\n" \
Meet_A_Geek Orders.txt
-p:交互式輸入密碼,更安全-r:主鍵衝突時替換(訂單修正場景)-l:導入期間鎖表,保證一致性--default-character-set=gbk(或 utf8)--local 客戶端本地讀取,減少網絡傳輸AUTO_INCREMENT 即可自動填充YYYY-MM-DD、YYYYMMDD,建議統一標準格式\N 表示 NULL| 特性 | mysqlimport | LOAD DATA INFILE |
|---|---|---|
| 調用方式 | 命令行工具 | SQL 語句 |
| 腳本化批量 | 極易(Shell/Python 循環) | 需動態拼接 SQL |
| 遠程導入 | 支持 --local | 需 LOCAL 關鍵字 + 客戶端支持 |
| 錯誤處理 | -f 強制繼續 | 需應用層捕獲異常 |
mysqlimport 是 DBA/運維批量導入文本數據的首選工具,掌握其核心參數可大幅提升導入效率與可靠性。生產環境建議先在測試庫驗證參數組合,確認無誤後再執行正式導入。