萬盛學電腦網

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

MySQL 從庫快速備份與還原:mysqldump 與物理文件兩大方案實戰

方案一:邏輯備份 mysqldump(通用、跨版本)

備份步驟

# 1. 停止 SQL 線程,保證 Relay Log 一致性點
mysqladmin stop-slave -uroot -p

# 2. 全量導出
mysqldump --all-databases --single-transaction --master-data=2 \
  --routines --triggers --events --hex-blob > fulldb.dump

# 3. 重啟複製
mysqladmin start-slave -uroot -p

# 4. 打包關鍵元數據文件
tar -czf /tmp/dbdump.tar.gz fulldb.dump /var/lib/mysql/mysql-relay-log.info

關鍵點:mysql-relay-log.info 記錄「已執行到 Master 的哪個 Binlog 位點」,還原時必須對齊。

還原步驟

# 1. 導入數據
mysql -uroot -p < /root/fulldb.dump

# 2. 停止複製線程
STOP SLAVE;

# 3. 根據 relay-log.info 重新指定同步起點
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;   -- 取自 relay-log.info 第 3 行

# 4. 啟動並驗證
START SLAVE;
SHOW SLAVE STATUS\G
# 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes

方案二:物理文件備份(極速、需同版本/同配置)

適用於大數據庫(> 500GB)、追求最短 RTO 场景。

備份

systemctl stop mariadb
tar --selinux --acls --xattrs -czPf /root/dbbackup.tar.gz /var/lib/mysql/
systemctl start mariadb
  • --selinux --acls --xattrs 保留 SELinux 上下文、ACL、擴展屬性,防止還原後權限錯誤導致無法啟動。
  • -P 保留絕對路徑,解壓時直接覆蓋根目錄。

還原

systemctl stop mariadb
tar --selinux --acls --xattrs -xzPf /root/dbbackup.tar.gz -C /
systemctl start mariadb

啟動後 MySQL 會自動讀取 relay-log.info、master.info 接續同步,無需手動 CHANGE MASTER。

故障排查:SELinux 導致 Binlog 文件無法讀取

150401 9:58:06 [ERROR] mysqld: File '/var/lib/mysql/mysql-bin.index' not found (Errcode: 13)

檢查上下文

ls -Z /var/lib/mysql/mysql-bin.index
# -rw-rw----. mysql mysql unconfined_u:object_r:var_lib_t:s0 mysql-bin.index

解決

# 方案一:永久關閉 SELinux(需重啟)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
reboot

# 方案二:備份/還原時保留上下文(推薦)
tar --selinux --acls --xattrs ...
# 或還原後修復
restorecon -Rv /var/lib/mysql

方案選型建議

維度mysqldump物理文件
速度慢(GB 級分鐘~小時)極快(僅受磁盤 I/O 限制)
跨版本/架構支援需完全一致
佔用空間壓縮後較小原始大小(可配合壓縮)
還原後同步需手動 CHANGE MASTER自動銜接
適用場景遷移、異構、中小庫同架構大庫災備、克隆新從庫
copyright © 萬盛學電腦網 all rights reserved