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,條件必須雙引號 |
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 更安全。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;
注意:
SOURCE 後不加分號。INSERT、CREATE、DROP 等權限。SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 結束後恢復,大幅提速。mysqlbinlog 導出增量。規範的備份流程是資料安全的最後防線,建議將上述命令封裝為 Shell/Python 腳本納入排程,並對輸出檔做校驗和壓縮。