MySQL 備份策略分為**邏輯備份**(mysqldump)與**物理備份**(原始資料檔案)。本文詳述兩種方法的操作步驟、關鍵檔案(relay-log.info)、還原流程、SELinux 權限坑與故障排查。
# 1. 停止 Slave 複寫(確保一致性點)
mysqladmin stop-slave -uroot -p
# 2. 完整邏輯備份所有資料庫
mysqldump --all-databases > fulldb.dump
# 3. 重新啟動 Slave
mysqladmin start-slave -uroot -p
# 4. 同步備份 relay-log.info(記錄主庫 Binlog 位置,還原 Slave 關鍵)
# 內容範例:mysql-bin.000002 3968
tar -czf /tmp/dbdump.tar.gz ./fulldb.dump ./mysql-relay-log.info
# 1. 匯入邏輯備份
mysql -uroot -p < /root/dbdump.db
# 2. 設定複寫起點(依 relay-log.info 內容)
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.10.201',
MASTER_USER='slave_user',
MASTER_PASSWORD='abc@DEF',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=3968;
START SLAVE;
# 3. 驗證
SHOW SLAVE STATUS\G
# 關鍵:Slave_IO_Running: Yes / Slave_SQL_Running: Yes
# 1. 停止服務(確保檔案一致性)
systemctl stop mariadb
# 2. 完整封存資料目錄(含 SELinux/ACL/xattr 屬性)
tar --selinux --acls --xattrs -czPf /root/dbbackup.tar.gz /var/lib/mysql/
# 3. 重新啟動服務
systemctl start mariadb
systemctl stop mariadb
tar --selinux --acls --xattrs -xzPf /root/dbbackup.tar.gz -C /
systemctl start mariadb
關鍵參數:--selinux --acls --xattrs 保留安全性屬性,否則還原後 mysqld 啟動失敗(Errcode: 13 Permission denied)。
錯誤徵狀:
[ERROR] mysqld: File '/var/lib/mysql/mysql-bin.index' not found (Errcode: 13)
[ERROR] Aborting
檢查:ls -Z mysql-bin.index 顯示 unconfined_u:object_r:var_lib_t:s0 等標籤缺失或錯誤。
解決方案:
tar --selinux --acls --xattrs(推薦,保留原標籤)。/etc/selinux/config 設 SELINUX=disabled 並重啟(生產環境謹慎評估)。restorecon -Rv /var/lib/mysql。| 維度 | mysqldump (邏輯) | Physical Backup (物理) |
|---|---|---|
| 速度 | 慢(SQL 解析/重建索引) | 極快(檔案層級複製) |
| 跨版本/平台 | 支援良好 | 嚴格要求相同版本、架構、配置 |
| 備份粒度 | 資料庫/資料表/WHERE 條件 | 整個執行個體/資料目錄 |
| 還原彈性 | 可編輯 SQL、部分匯入 | 整體還原,難以部分恢復 |
| 一致性 | 需鎖表/停 Slave | 需停服務或檔案系統快照 |
| 適用場景 | 邏輯遷移、異構平台、審計、小/中型庫 | 大型庫、同架構叢集、極速 RTO 需求 |
mysqldump 邏輯備份(異地存放),每週/每日物理備份(本地快速恢復)。relay-log.info / master.info 必須納入備份,否則 Slave 重建極其困難。gpg 或 openssl 加密。