熱備份 指在 MySQL 服務運行狀態下進行備份,不需停機。核心挑戰在於「備份期間資料仍在變更」,必須透過鎖定機制或交易快照保證資料一致性。mysqldump 是最通用的邏輯熱備份工具。
larrydb(含 InnoDB 表 class、MyISAM 表 stu)、gamemysqldump -uroot -p123456 --database larrydb > /databackup/larrydb.sql
關鍵參數 --database 會在輸出檔包含 CREATE DATABASE 與 USE 敘述,還原時可直接建庫。
# 1. 刪除資料庫 mysql -uroot -p123456 -e "DROP DATABASE larrydb;" # 2. 還原 mysql -uroot -p123456 < /databackup/larrydb.sql
驗證:SELECT * FROM larrydb.class; 與 SELECT * FROM larrydb.stu; 資料完整回覆。
# 備份 larrydb 與 game 兩個資料庫 mysqldump -uroot -p123456 --databases larrydb game > /databackup/larrydb_game.sql # 還原(同單庫) mysql -uroot -p123456 < /databackup/larrydb_game.sql
mysqldump -uroot -p123456 --all-databases > /databackup/all_databases.sql
輸出檔約 506KB,包含 mysql、performance_schema 等系統庫,適合整機遷移或建立從庫基準。
# 備份 game 庫中的 hero、country 兩張表 mysqldump -uroot -p123456 game hero country > /databackup/game_hero_country.sql
還原陷阱: 單表備份檔 不含 CREATE DATABASE / USE 敘述,還原時必須指定目標資料庫:
# 錯誤:ERROR 1046 (3D000): No database selected mysql -uroot -p123456 < game_hero_country.sql # 正確:指定資料庫 mysql -uroot -p123456 --database game < game_hero_country.sql
| 痛點 | 優化參數/策略 | 說明 |
|---|---|---|
| 備份過程鎖表影響業務 | --single-transaction (InnoDB) | 利用 MVCC 取得一致性快照,不加全域讀鎖 |
| 大表備份耗時過長 | --quick / --net_buffer_length | 串流輸出不緩存全表,減少記憶體壓力 |
| 還原速度慢 | 關閉索引/外鍵檢查、批次提交 | SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; |
| 備份檔過大 | 管線壓縮 | gzip | 節省磁碟空間與網路傳輸時間 |
核心原則: 備份重於一切。無論採用何種工具,必須定期演練還原流程(Restore Drill),驗證備份檔完整性、還原時間點目標(RTO)與復原點目標(RPO)是否符合業務 SLA。
