首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 備份與還原完整指南:mysqldump 參數、錯誤排查與導入最佳實踐

     編輯:MySQL 綜合教學

MySQL 備份與還原完整指南:mysqldump 參數、錯誤排查與導入最佳實踐

mysqldump 是 MySQL 官方邏輯備份工具,支援結構、資料、條件導出。本文系統整理常用參數組合、常見權限錯誤解法、導入注意事項,幫助 DBA 建立標準化備份流程。

一、常用備份命令模板

需求命令說明
僅結構(所有表)mysqldump -uroot -p -d dbname > db.sql-d / --no-data
僅結構(單表)mysqldump -uroot -p -d dbname tbl > db.sql
結構 + 資料(全庫)mysqldump -uroot -p dbname > db.sql省略 -d
結構 + 資料(單表)mysqldump -uroot -p dbname tbl > db.sql
條件導出(部分資料)mysqldump -uroot -p dbname tbl -w "id>100" > db.sql-w / --where,條件必須雙引號

二、常見錯誤與解決

錯誤:Access denied ... when doing LOCK TABLES

mysqldump: Got error 1044: Access denied for user 'zndw'@'localhost' 
to database 'scilibrary' when doing LOCK TABLES

原因:備份用戶缺少 LOCK TABLES 權限。

方案 1(推薦):授予權限

GRANT LOCK TABLES ON dbname.* TO 'user'@'host';

方案 2(快速繞過):跳過鎖表

mysqldump -uroot -p dbname --skip-lock-tables > db.sql
  • ⚠️ --skip-lock-tables 可能導致備份資料不一致(非事務表),InnoDB 配合 --single-transaction 更安全。

三、InnoDB 熱備份最佳參數組合

mysqldump -uroot -p \
  --single-transaction \
  --flush-logs \
  --master-data=2 \
  --routines --triggers --events \
  dbname > db_backup_$(date +%F_%H-%M).sql
  • --single-transaction:啟動一致性快照,不鎖表(InnoDB 專用)。
  • --flush-logs:切換二進制日誌,配合 --master-data=2 記錄備份時刻 Binlog 位置,支援時間點恢復(PITR)。
  • --routines --triggers --events:包含存儲過程、觸發器、事件。

四、導入(還原)操作

# 進入 mysql 客戶端
mysql -uroot -p dbname < db_backup.sql

# 或在 mysql 客戶端內
SOURCE /path/to/db_backup.sql;

注意:

  1. SOURCE 後不加分號。
  2. 用戶需具備 INSERT、CREATE、DROP 等權限。
  3. 大檔導入建議先 SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 結束後恢復,大幅提速。

五、備份策略建議

  • 全量備份:每日 1 次(低峰期)。
  • 增量備份:啟用 Binlog,每小時 mysqlbinlog 導出增量。
  • 異地備份:自動同步至遠端儲存(S3、NFS、異地機房)。
  • 定期演練:每季至少 1 次全量恢復演練,驗證備份可用性。

規範的備份流程是資料安全的最後防線,建議將上述命令封裝為 Shell/Python 腳本納入排程,並對輸出檔做校驗和壓縮。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved