mysqldump 核心價值
- 將整庫/指定表導出為單一 SQL 文字檔
- 包含
CREATE TABLE (DDL) 與 INSERT (DML)
- 文字檔可直接
mysql < dump.sql 還原
- 支援
WHERE 條件篩選資料
基本語法
mysqldump [OPTIONS] database [tables]
# 整庫
mysqldump -p db_name > dump.sql
# 指定表
mysqldump -p db_name table1 table2 > dump.sql
# 條件導出
mysqldump -p --where="id > 100" db_name table1 > dump.sql
常用參數對照表
| 參數 | 作用 |
--add-drop-table | 每表前加 DROP TABLE IF EXISTS,還原不報錯 |
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLES,防併發干擾 |
-c / --complete-insert | INSERT 含欄位名,利於異構遷移 |
--delayed-insert | 使用 INSERT DELAYED |
-F / --flush-logs | 導出前刷新 Binlog |
-f / --force | 遇錯誤繼續執行 |
--full | CREATE TABLE 含完整屬性 |
-l / --lock-tables | 導出期間鎖表(MyISAM) |
-t / --no-create-info | 僅導出資料,不含 DDL |
-d / --no-data | 僅導出結構,不含資料 |
--opt | 綜合優化(含 --add-drop-table, --add-locks, --quick 等) |
-q / --quick | 串流輸出,不載入記憶體 |
-T / --tab=path | 產生 .sql (DDL) 與 .txt (資料) 兩檔案 |
-w / --where="..." | 條件篩選資料 |
還原指令
mysql -u root -p db_name < dump.sql
# 或
mysql -u root -p -e "SOURCE /path/dump.sql" db_name
最佳實踐
- InnoDB 大庫:
--single-transaction --quick --routines --triggers --events
- 定期壓縮
gzip、異地儲存
- 每季演練還原驗證備份可用性