mysqldump 匯出 CSV 方法小記
Contents
MySQL 提供多種方式將資料匯出為 CSV 格式,從純 SQL 指令到圖形化工具都有。本文整理幾種常用方法,並說明各自的限制與適用場景。
方法一:SELECT … INTO OUTFILE(最快速)
這是 MySQL 內建的匯出方式,直接在 MySQL 伺服器上產生 CSV 檔案,速度最快,適合大量資料。
|
|
常用選項說明:
| 選項 | 說明 | 範例 |
|---|---|---|
FIELDS TERMINATED BY |
欄位分隔符號 | ',' |
OPTIONALLY ENCLOSED BY |
字串欄位包覆字元 | '"' |
LINES TERMINATED BY |
換行符號 | '\n' 或 '\r\n' |
IGNORE 1 LINES |
匯入時跳過標頭行 | 搭配 LOAD DATA 使用 |
secure_file_priv 限制
MySQL 5.7.6 之後,INTO OUTFILE 受到 secure_file_priv 系統變數限制:
|
|
- 若值為
/var/lib/mysql-files/,只能寫入該目錄 - 若值為空字串
"",則無限制(不建議用於生產環境) - 若值為
NULL,則完全禁用INTO OUTFILE
修改設定需在 my.cnf(Linux)或 my.ini(Windows)中調整:
|
|
方法二:命令列 mysql 搭配管線輸出
若無法使用 INTO OUTFILE,可在客戶端直接將查詢結果轉為 CSV:
|
|
加上標題行:
|
|
--batch 會以 Tab 分隔輸出,--silent 去掉分隔線,再用 sed 把 Tab 換成逗號。
方法三:mysqldump 配合選項
mysqldump 本身不直接輸出 CSV,但可以搭配 --tab 選項,在伺服器端產生以 Tab 分隔的文字檔:
|
|
這會產生兩個檔案:
tablename.sql:建立表格的 DDLtablename.txt:實際資料(CSV 格式)
同樣受 secure_file_priv 限制,目錄必須是 MySQL 伺服器有寫入權限的路徑。
方法四:MySQL Workbench 圖形化匯出
若有安裝 MySQL Workbench,可用圖形介面操作:
- 執行查詢後,在結果集下方點選「Export」圖示
- 選擇「CSV」格式並指定輸出路徑
- 可自訂分隔符號、換行符號等設定
此方法不受 secure_file_priv 限制,資料傳輸在客戶端進行,適合開發時的臨時匯出。
各方法比較
| 方法 | 速度 | secure_file_priv | 需要工具 | 適用場景 |
|---|---|---|---|---|
| INTO OUTFILE | 最快 | 受限制 | MySQL 即可 | 大量資料、自動化腳本 |
| mysql + pipeline | 中等 | 不受限 | 命令列 | 遠端匯出、客戶端控制 |
| mysqldump –tab | 快 | 受限制 | 命令列 | 需要同時備份結構 |
| MySQL Workbench | 較慢 | 不受限 | Workbench | 開發時的手動操作 |