CREATE) 與 DML (INSERT) 完整重建指令WHERE 條件篩選匯出mysqldump [選項] 資料庫名稱 [資料表名稱...] > 輸出檔案.sql
mysqldump [選項] --databases 資料庫1 [資料庫2...] > 輸出檔案.sql
mysqldump [選項] --all-databases > 輸出檔案.sql
# 整個資料庫備份
mysqldump -p Meet_A_Geek > MeetAGeek_Dump_File.txt
# 單一資料表備份
mysqldump -p Meet_A_Geek Orders > MeetAGeek_Orders.txt
# 條件篩選備份
mysqldump -p --where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
| 參數 | 短參數 | 功能說明 |
|---|---|---|
--add-drop-table | 每張表前加 DROP TABLE IF EXISTS,還原時避免衝突 | |
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLES,防止併發干擾 | |
--complete-insert | -c | INSERT 含欄位名,跨資料庫匯入更安全 |
--delayed-insert | 使用 INSERT DELAYED,降低鎖定衝突 | |
--flush-logs | -F | 備份前刷新二進制日誌 |
--force | -f | 發生錯誤繼續執行 |
--full | CREATE TABLE 含完整屬性 | |
--lock-tables | -l | 備份期間鎖定表(MyISAM 必須) |
--no-create-info | -t | 不輸出 CREATE TABLE(僅資料) |
--no-data | -d | 不輸出 INSERT(僅結構) |
--opt | 啟用多項加速選項(預設開啟) | |
--quick | -q | 逐行輸出不緩衝,大表必須 |
--tab=路徑 | -T | 輸出兩檔:.sql (結構) + .txt (資料,Tab 分隔) |
--where="條件" | -w | 篩選匯出資料 |
--fields-terminated-by=, | 配合 --tab 指定欄位分隔符 |
# 匯出 2000 年後訂單為 CSV 供 Excel 使用
mysqldump -p --where="Order_Date >= '2000-01-01'" \
--tab=/home/mark --no-create-info \
--fields-terminated-by=, Meet_A_Geek Orders
Schema = 以 DDL (CREATE) 完整描述資料庫結構的語句集合。mysqldump 實質上是將 Schema 逆向工程為 SQL 腳本。
適用於需自訂輸出格式、多表 JOIN、報表產生場景。
SELECT * INTO OUTFILE '/path/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;
-- 執行
mysql < Report_G.rpt
# 完整還原
mysql -p Meet_A_Geek < MeetAGeek_Dump_File.txt
# 單表還原
mysql -p Meet_A_Geek < MeetAGeek_Orders.txt
--opt --quick --lock-tables --flush-logs--quick 避免記憶體耗盡--flush-logs) 配合時間點復原 (PITR)