MySQL 提供 SELECT ... INTO OUTFILE 將查詢結果直接寫入伺服器端檔案,搭配 LOAD DATA INFILE 可實現高效率的資料遷移與歸檔。本文詳細說明語法、權限要求、跨平台路徑差異與實戰腳本。
SELECT col1, col2, ...
FROM db.table
WHERE condition
INTO OUTFILE '/path/to/file.txt'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n';
#!/bin/bash
yesterday=$(date -d "-1 day" +%Y%m%d)
outfile="/var/lib/mysql/stat/yl_clicks_${yesterday}.txt"
sqlfile="/tmp/cmd_yl_clicks_${yesterday}.sql"
# 1. 產生 SQL 腳本
cat > "$sqlfile" <
SELECT ITEM1_1, ID, ITEM2_1, ...
FROM `ID_7_vote_insert`
WHERE `VoteID`='7'
ORDER BY ITEM1_1 ASC
INTO OUTFILE 'C:/tmp/test_new.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '\"';
LOAD DATA INFILE '/var/lib/mysql/stat/yl_clicks_20240101.txt'
INTO TABLE stat.yl_clicks
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(coder, clicknum, time);
欄位對應順序需與檔案一致;若表有自增主鍵,可用 NULL 或略過該欄位。
mysqlimport -u username -ppassword -f -i stat \
"D:/MySQL/data/stat/yl_clicks.txt" >> sync.log
-f:遇錯誤強制繼續-i:顯示匯入統計資訊FILE 權限(GRANT FILE ON *.* TO 'user'@'host';)。SHOW VARIABLES LIKE 'secure_file_priv'; 確認允許路徑,或在 my.cnf 設定 secure_file_priv='' 解除限制(需重啟)。INTO OUTFILE 路徑為「伺服器端」絕對路徑,非客戶端本機路徑。SET NAMES utf8mb4; 避免中文亂碼。