mysqldump (邏輯備份,產生 SQL 檔)source (在 MySQL Client 內執行 SQL 檔)| 參數 | 說明 |
|---|---|
-u / -p | 用戶/密碼 (密碼可寫 -p'pass' 免交互) |
--single-transaction | InnoDB 熱備份關鍵:啟動一致性快照,不鎖表 (需 REPEATABLE READ) |
--routines --triggers --events | 備份存儲過程、觸發器、事件 |
--master-data=2 | 輸出 CHANGE MASTER TO 註釋 (含 Binlog 位置),便於搭建從庫 |
--hex-blob | 二進制欄位以十六進制導出,避免編碼問題 |
--quick | 逐行讀取寫入,不緩存全表結果集 (大表必加) |
--set-gtid-purged=OFF | GTID 環境避免污染 |
--compress | 網路傳輸壓縮 (遠程備份) |
mysqldump -uroot -p'pass' --single-transaction --routines --triggers --events \
--master-data=2 --hex-blob --quick \
my_database > /backup/my_database_$(date +%F).sql
mysqldump -uroot -p'pass' --single-transaction --routines --triggers --events \
--databases db1 db2 db3 > /backup/multi_db_$(date +%F).sql
mysqldump -uroot -p'pass' --single-transaction \
my_database table1 table2 > /backup/partial_$(date +%F).sql
mysqldump -uroot -p'pass' --single-transaction --routines --triggers --events \
--all-databases --master-data=2 > /backup/full_$(date +%F).sql
mysql -uroot -p'pass' # 進入客戶端
-- 若備份含 CREATE DATABASE,無需指定庫
source /backup/full_2024-01-15.sql;
-- 或指定目標庫
USE target_db;
source /backup/my_database_2024-01-15.sql;
mysql -uroot -p'pass' < /backup/full_2024-01-15.sql
# 或指定庫
mysql -uroot -p'pass' target_db < /backup/my_database_2024-01-15.sql
# 1. 拆分單表檔案 (需修改 mysqldump 腳本或用工具)
# 2. 使用 mysqlpump (MySQL 5.7.8+) 或 myloader (mydumper 套件)
mysqlpump -uroot -p'pass' --parallel-schemas=4 --databases db1 db2 > dump.sql
# 恢復
mysqlpump ... | mysql -uroot -p'pass'
mysqldump --master-data=2 記錄 Binlog 位置 (File, Pos)。mysqlbinlog --start-position=XXX --stop-datetime='2024-01-15 14:30:00' mysql-bin.000005 | mysql -uroot -psource 恢復,校驗資料完整性 (checksum、行數、關鍵業務查詢)。SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, RELOAD, REPLICATION CLIENT。mysqldump | gpg --encrypt 或儲存於加密磁碟。--single-transaction → MyISAM 表鎖表、InnoDB 一致性無保障。--quick → 客戶端 OOM。SET NAMES utf8mb4; 或檔案頭指定。source 含 GTID 的備份 → 主從同步報錯,需 --set-gtid-purged=OFF。掌握 mysqldump 參數組合與多種恢復路徑,配合 Binlog PITR,構建可靠的 MySQL 資料保護體系。