mysqlimport 與 mysqldump 是 MySQL 官方提供的高效資料匯入/匯出工具,支援多種格式與進階選項,適合批次處理、備份還原與跨平台遷移。本文整理常用語法、參數表與實戰範例。
mysqlimport [選項] 資料庫名稱 文字檔案名稱
檔案名稱的第一個句點(.)之前即為資料表名稱。例如 Customers.txt 對應 Customers 表,Cus.to.mers.txt 對應 Cus 表。
| 選項 | 說明 |
|---|---|
-d, --delete | 匯入前清空目標表 |
-f, --force | 遇錯誤仍繼續執行 |
-i, --ignore | 跳過唯一鍵衝突的行(保留舊資料) |
-l, --lock-tables | 匯入前鎖定表,防止並發干擾 |
-r, --replace | 以新資料取代唯一鍵衝突的舊行 |
--fields-terminated-by=, | 指定欄位分隔符(預設 Tab) |
--fields-enclosed-by=\" | 指定欄位包圍字元(如雙引號) |
--lines-terminated-by=\n | 指定換行符(預設 newline) |
--local | 從客戶端本機讀取檔案(解決權限/路徑問題) |
mysqlimport -u root -p --local -r -l \
--fields-terminated-by=, \
--fields-enclosed-by=\" \
Meet_A_Geek Orders.txt
說明:-r 更新重複鍵、-l 鎖表、--local 避免伺服器端找不到檔案(錯誤 Errcode: 2/13)。
將 SQL 指令寫入文字檔(如 New_Data.sql),再以 mysql -u root -p < New_Data.sql 執行。適用於大量 INSERT、結構變更或從日誌還原。
LOAD DATA INFILE '/tmp/data.txt'
INTO TABLE doing
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
LIMIT 20;
mysqldump [選項] 資料庫名稱 [表名稱...] > 輸出檔案.sql
mysqldump -u root -p Meet_A_Geek > MeetAGeek_Dump_File.txtmysqldump -u root -p Meet_A_Geek Orders > MeetAGeek_Orders.txtmysqldump -u root -p --where=\"Order_ID > 2000\" Meet_A_Geek Orders > Special_Dump.txt| 選項 | 作用 |
|---|---|
--add-drop-table | 每張表前加 DROP TABLE IF EXISTS,還原不衝突 |
--add-locks | INSERT 前後加鎖,加速匯入 |
-c, --complete-insert | 完整欄位名稱的 INSERT,跨庫遷移更安全 |
--single-transaction | InnoDB 熱備份必備,取得一致性快照 |
--quick | 逐行輸出,不佔大量記憶體 |
-T, --tab=路徑 | 產生 .sql(結構)與 .txt(資料)兩檔 |
-w, --where | 依條件篩選匯出資料 |
--opt | 開啟多項加速選項(預設開啟) |
mysqldump -u root -p \
--where=\"Order_Date >= '2000-01-01'\" \
--tab=/home/mark \
--no-create-info \
--fields-terminated-by=, \
Meet_A_Geek Orders
SELECT * INTO OUTFILE '/tmp/dump_file/doing_dump_2.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
FROM doing LIMIT 20;
mysqlimport 適合大量文字檔高速載入;mysqldump 則是備份、遷移、跨版本升級的瑞士刀。善用 --single-transaction、--quick、--where 等選項,可大幅降低對線上服務的影響。