萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL mysqldump 備份命令大全:單庫、單表、全庫與常用參數

核心命令模板

mysqldump -u username -p[password] [options] db_name [tbl_name ...] > dump.sql

注意: -p 後**無空格**直接跟密碼(不安全,建議省略讓終端提示輸入,或用 --defaults-extra-file)。

三大經典場景

1. 備份單個數據庫

mysqldump -u root -p db_name > db_name_$(date +%F).sql

2. 備份單個表

mysqldump -u root -p db_name table_name > table_name_$(date +%F).sql

3. 備份所有數據庫

mysqldump -u root -p --all-databases > all_dbs_$(date +%F).sql

生產環境必加參數(黃金組合)

mysqldump -u root -p \
  --single-transaction \      # InnoDB 熱備份,不加鎖,保證一致性視圖
  --master-data=2 \           # 輸出 CHANGE MASTER TO 註釋(含 Binlog 位點),便於搭建 Slave
  --routines \                # 包含存儲過程/函數
  --triggers \                # 包含觸發器
  --events \                  # 包含事件調度器
  --hex-blob \                # 二進制數據用十六進制導出,避免編碼問題
  --quick \                   # 流式讀取,不緩存整個結果集到內存(大表必加)
  --set-gtid-purged=OFF \     # GTID 模式下避免污染目標實例 GTID 執行集
  db_name > db_name_$(date +%F_%H-%M).sql

常用參數速查表

參數作用建議
-h, --host指定主機遠程備份必加
-P, --port指定端口非 3306 必加
--default-character-set連接字符集建議 utf8mb4
--no-data只導結構Schema 遷移/審計用
--no-create-info只導數據數據遷移/同步用
--where導出條件過濾--where="id > 1000" 分批導出
--ignore-table忽略表--ignore-table=db.log_table
--compress壓縮傳輸協議跨網段備份減少帶寬
--lock-tables=false不鎖表(MyISAM 必須鎖表保一致性)InnoDB 配合 --single-transaction 設 false
--flush-logs備份前切換 Binlog配合增量備份策略
--delete-master-logs備份後刪除舊 Binlog慎用!需確認 Slave 已同步

還原操作

全量還原

mysql -u root -p db_name < dump.sql
# 或登錄後
SOURCE /path/to/dump.sql;

單庫還原(從全庫備份中提取)

# 使用 sed/awk 提取單庫片段,或使用工具
sed -n '/^-- Current Database: `db_name`/,/^-- Current Database: `/p' all_dbs.sql > db_name.sql

進階:並行備份與壓縮

  • 並行導出: mysqldump 單線程。大庫建議用 mydumper(多線程、一致性快照、壓縮、分文件)。
  • 管道壓縮: mysqldump ... | gzip > dump.sql.gz(節省 70%+ 空間)。
  • 遠程直傳: mysqldump ... | ssh user@backup "cat > /backup/dump.sql"(不佔用本地磁碟)。

總結

mysqldump 是 MySQL 邏輯備份基石。生產環境**必加 --single-transaction --master-data=2 --quick --hex-blob**。大數據量(>50GB)轉用 mydumper 或 XtraBackup 物理備份。備份腳本需納入:壓縮、加密、上傳異地、校驗、定期演練恢復 閉環。

copyright © 萬盛學電腦網 all rights reserved