mysqldump 產生 SQL 語句,解析執行較慢。SELECT ... INTO OUTFILE 與 LOAD DATA INFILE 直接處理文字檔,速度快 5-10 倍,適合大量資料遷移、ETL、備份還原。
SELECT * FROM table_name INTO OUTFILE 'file_path';
-- 全表匯出(預設路徑:secure_file_priv 目錄)
SELECT * FROM phpernote INTO OUTFILE 'phpernote.txt';
-- 指定欄位匯出
SELECT id, name, email FROM users INTO OUTFILE 'users_export.txt';
-- 自訂格式(CSV)
SELECT * FROM orders
INTO OUTFILE 'orders.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
LOAD DATA INFILE 'file_path' INTO TABLE table_name;
-- 全欄位匯入(檔案欄位順序需與表一致)
LOAD DATA INFILE 'users_export.txt' INTO TABLE users;
-- 指定欄位匯入(須與匯出順序一致)
LOAD DATA INFILE 'users_export.txt' INTO TABLE users (id, name, email);
-- CSV 格式匯入
LOAD DATA INFILE 'orders.csv' INTO TABLE orders
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 LINES; -- 跳過標題行
ERROR 1 (HY000): Can't create/write to file '/home/a' (Errcode: 13)
SHOW VARIABLES LIKE 'secure_file_priv';NULL 表示禁用;若為路徑則只能讀寫該目錄下檔案。[mysqld]
secure_file_priv = /data/export/chown mysql:mysql /data/export
chmod 750 /data/export/etc/apparmor.d/usr.sbin.mysqld 加入:/data/export/* rw,systemctl reload apparmorLOAD DATAALTER TABLE t DISABLE KEYS,匯入後 ENABLE KEYS(僅 MyISAM 有效,InnoDB 無效)SET autocommit=0 批次提交減少 Redo Log 刷盤CHECKSUM TABLE 對比來源| 場景 | 推薦工具 | 理由 |
|---|---|---|
| 全庫邏輯備份/遷移 | mysqldump | 含結構、觸發器、視圖、程序 |
| 單表大量資料遷移 | INTO OUTFILE / LOAD DATA | 速度最快,資源消耗最低 |
| 異構資料庫同步 | CSV + LOAD DATA | 通用格式,易於轉換 |
| 增量同步 | binlog + Canal/Debezium | 即時、低延遲 |