# 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。
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 自動銜接
適用場景 遷移、異構、中小庫 同架構大庫災備、克隆新從庫