# 全庫備份
mysqldump -uroot -p --all-databases > all.sql
# 單庫備份
mysqldump -uroot -p product > product.sql
# 單表/多表備份
mysqldump -uroot -p product code list > code_list.sql
# 僅結構
mysqldump -uroot -p -d --add-drop-table db > schema.sql
關鍵參數:-l 鎖表、-F 切換 binlog、--single-transaction(InnoDB 熱備不鎖表)。
# 1. 恢復全量備份
mysql -uroot -p product < product.sql
# 2. 重放備份後的 binlog
mysqlbinlog localhost-bin.000012 | mysql -uroot -p product
# 恢復到 08:59:59
mysqlbinlog --stop-datetime="2023-09-17 08:59:59" /var/log/mysql/bin.123456 | mysql -uroot -p
# 跳過故障點繼續
mysqlbinlog --start-datetime="2023-09-17 09:01:00" /var/log/mysql/bin.123456 | mysql -uroot -p
# 1. 導出故障前後區間 SQL
mysqlbinlog --start-datetime="08:55:00" --stop-datetime="09:05:00" bin.123456 > /tmp/restore.sql
# 2. 編輯找到錯誤語句前後 position(如 198765 / 198869)
# 3. 分段重放
mysqlbinlog --stop-position="198765" bin.123456 | mysql -uroot -p
mysqlbinlog --start-position="198769" bin.123456 | mysql -uroot -p
| 類型 | 適用引擎 | 操作要點 |
|---|---|---|
| 冷備份 | 所有 | 停庫 systemctl stop mysqld → cp -r datadir → 啟庫 → 重放 binlog |
| 熱備份-MyISAM | MyISAM | FLUSH TABLES WITH READ LOCK → 複製 .MYD/.MYI/.frm → UNLOCK TABLES 或用 mysqlhotcopy |
| 熱備份-InnoDB | InnoDB | 推薦 Percona XtraBackup(開源、不鎖表、支援增量、流式傳輸),商業工具 ibbackup 已停更 |
expire_logs_days=7 或按磁盤容量清理