| 方案 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| INTO OUTFILE | 全表導出、服務器本地 | 純 SQL、性能最強 | 需文件權限、難加 WHERE、難遠程導出 |
| sed 管道 | 帶條件導出、遠程客戶端 | 靈活、支持複雜查詢 | 需處理轉義、大數據慢 |
| mysqldump -T | 表級導出、服務器本地 | 官方工具、格式標準 | 需目錄權限、不支持 WHERE |
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
關鍵限制:
/tmp/FILE 權限:GRANT FILE ON *.* TO 'user'@'host';mysql -uroot -p test -e "SELECT ip FROM server WHERE a.name LIKE '%abc%'" -N -s | \ sed -e 's/^/"/g' -e 's/$/"/g' -e 's/\t/","/g' > /tmp/test.csv
參數解析:
-e:直接執行 SQL-N:不輸出列名-s:靜默模式(無表格框,Tab 分隔)sed 轉義邏輯:
s/^/"/g:行首加雙引號s/$/"/g:行尾加雙引號+換行s/\t/","/g:Tab 替換為 ","(CSV 標準分隔)進階:多欄位處理
mysql -uroot -p db -e "SELECT id,name,email FROM users WHERE status=1" -N -s | \
awk -F'\t' '{printf "\"%s\",\"%s\",\"%s\"\n", $1, $2, $3}' > users.csv
mysqldump -u username -p -t -T /path/to/dir dbname table_name \ --fields-terminated-by=',' \ --fields-enclosed-by='"' \ --lines-terminated-by='\n'
生成文件:
/path/to/dir/table_name.txt:數據文件(CSV 格式)/path/to/dir/table_name.sql:建表語句要求:目標目錄需 MySQL 進程寫權限,通常配合 secure_file_priv 參數目錄。
INTO OUTFILE 或 mysqldump -T(服務器端,避免網絡傳輸)mysql -e ... | awk/sed(客戶端,靈活可控)crontab,導出後 gzip 壓縮上傳對象存儲OPTIONALLY ENCLOSED BY '"' 並雙引號轉義split -l 1000000 large.csv part_沒有銀彈,**靈活性用管道法,性能用服務器端法**。建議團隊標準化一套導出腳本庫,參數化表名、條件、輸出路徑,複用率 90%+。