基本語法
SELECT * FROM table_name
INTO OUTFILE '/path/to/filename.txt'
[CHARACTER SET charset_name]
[FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\']
[LINES TERMINATED BY '\n'];
常用範例
-- 導出前 100 行至指定路徑 (需 MySQL 服務進程有寫入權限)
SELECT * FROM mytable LIMIT 100
INTO OUTFILE '/var/lib/mysql-files/export_100.txt';
-- 自訂分隔符 (CSV 風格)
SELECT id, name, email FROM users
INTO OUTFILE '/var/lib/mysql-files/users.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
關鍵限制與權限 (必讀)
- 安全目錄限制: MySQL 5.7+ 預設啟用
secure_file_priv,導出路徑必須在該目錄下 (通常為 /var/lib/mysql-files/)。查看設定:SHOW VARIABLES LIKE 'secure_file_priv';。若為 NULL 則完全禁止導入導出。
- 檔案不可覆蓋: 目標檔案若已存在會報錯,需先刪除或更換檔名。
- 權限需求: 執行使用者需具備
FILE 權限 (GRANT FILE ON *.* TO 'user'@'host';)。
- 路徑是伺服器端: 檔案生成在 MySQL Server 主機,而非客戶端機器。
替代方案:客戶端導出 (無 FILE 權限/跨主機)
# 命令列導出 (Tab 分隔,含標頭)
mysql -u user -p -h host -D db -e "SELECT * FROM tbl" > local_file.tsv
# 使用 mysqldump 導出純資料 (可加 --tab 產生 txt)
mysqldump -u user -p -h host -D db --tables tbl --no-create-info --tab=/tmp/outdir