資料匯出主要用於兩大情境:備份資料庫(防止資料遺失)與資料共享(跨系統、跨部門交換資料)。MySQL 提供強大的匯出工具,支援整庫、單表、條件式匯出,並可輸出為 SQL 腳本或純文字格式。
mysqldump 位於 mysql/bin/ 目錄,能將資料庫結構(DDL)與資料(INSERT)完整導出為單一文字檔,方便異地還原或遷移。
bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
bin/mysqldump –p Meet_A_Geek Orders > MeetAGeek_Orders.txt
bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
| 參數 | 功能說明 |
|---|---|
--add-drop-table | 在 CREATE TABLE 前加入 DROP TABLE IF EXISTS,避免還原時衝突 |
--add-locks | INSERT 前後加入 LOCK/UNLOCK TABLE,加速匯入並防併發衝突 |
-c / --complete-insert | INSERT 語句包含欄位名,利於跨資料庫匯入 |
--delayed-insert | 使用 INSERT DELAYED,降低對線上服務影響 |
-F / --flush-logs | 匯出前刷新 Binlog,利於增量備份 |
-t / --no-create-info | 僅匯出資料,不含 DDL |
-d / --no-data | 僅匯出結構,不含資料 |
--opt | 啟用最佳化組合(quick、add-drop-table、add-locks、extended-insert、lock-tables) |
-q / --quick | 逐行讀取寫入,不佔用大量記憶體,適合大表 |
-T / --tab=路徑 | 產生兩個檔:.sql(結構)與 .txt(資料),配合 --fields-terminated-by 等格式化參數 |
-w / --where | 指定 WHERE 條件過濾資料 |
bin/mysqldump –p –where "Order_Date >='2000-01-01'"
–tab=/home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders
此指令將 2000 年後的訂單以逗號分隔輸出,無建表語句,直接可用 Excel 開啟。
此指令在 MySQL 命令列中執行,功能與 LOAD DATA INFILE 互為逆向操作,支援相同的格式化參數,且可結合 JOIN、WHERE 等複雜查詢,彈性極高,甚至可作為簡易報表產生器。
bin/mysql –p Meet_A_GeekSELECT * INTO OUTFILE '/home/mark/Orders.txt'
FIELDS TERMINATED BY ','
FROM Orders
WHERE Order_Date >= '2000-01-01';
建立 Report_G.rpt 檔:
USE Meet_A_Geek;
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Kinnard", "Vicky");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Kinnard", "Steven");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Brown", "Sam");
SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt' FROM Customers WHERE Customer_ID > 1;
執行:bin/mysql < Report_G.rpt,即可自動寫入新客戶並匯出姓氏報表。
mysqldump 適合完整備份與結構遷移;SELECT INTO OUTFILE 適合自訂查詢、報表產出與格式化匯出。兩者互補,掌握參數細節能大幅提升資料治理效率。