首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL LVM 快照熱備份實戰:零停機、秒級備份、主從同步整合

     編輯:MySQL 資料庫相關知識

前置需求

  • 資料目錄掛載在 LVM 邏輯卷 (如 /dev/mysqlvg/mysqllv 掛載 /var/lib/mysql)
  • 卷組保留足夠空間建立快照 (建議 10-20% 資料量)
  • 安裝 lvm2 套件

前期準備:遷移資料目錄至 LVM

# 1. 建立邏輯卷
lvcreate -L 50G -n mysqllv mysqlvg
mkfs.ext4 /dev/mysqlvg/mysqllv

# 2. 停止 MySQL
systemctl stop mysqld

# 3. 掛載臨時目錄同步資料
mount /dev/mysqlvg/mysqllv /mnt
cd /var/lib/mysql
tar cf - . | tar xf - -C /mnt   # 保留權限/屬性

# 4. 切換掛載點
umount /mnt
rm -rf /var/lib/mysql/*
mount /dev/mysqlvg/mysqllv /var/lib/mysql

# 5. 永久掛載 (取得 UUID)
blkid /dev/mysqlvg/mysqllv
echo "UUID=xxxx  /var/lib/mysql  ext4  defaults  0 0" >> /etc/fstab

# 6. 關閉 SELinux (或設定正確 context)
setenforce 0

# 7. 啟動驗證
systemctl start mysqld

LVM 快照備份標準流程

# 1. 全域鎖表 (極短暫)
mysql> FLUSH TABLES WITH READ LOCK;

# 2. 記錄 Binlog 位置 (主從同步用)
mysql> SHOW MASTER STATUS\G;
# 記下 File 和 Position

# 3. 建立快照 (秒級,僅元資料)
lvcreate -L 5G -s -n mysql_snap /dev/mysqlvg/mysqllv

# 4. 解鎖 (業務恢復正常)
mysql> UNLOCK TABLES;

# 5. 掛載快照備份
mount /dev/mysqlvg/mysql_snap /backup/snap
tar czf /backup/mysql_$(date +%F).tar.gz -C /backup/snap .

# 6. 卸載並移除快照 (釋放空間)
umount /backup/snap
lvremove -f /dev/mysqlvg/mysql_snap

主從同步整合 (從庫初始化)

  1. 將備份檔傳輸至從庫,解壓至資料目錄
  2. 啟動從庫 MySQL
  3. 配置同步起點:
    CHANGE MASTER TO
        MASTER_HOST='192.168.1.100',
        MASTER_USER='repl',
        MASTER_PASSWORD='secret',
        MASTER_LOG_FILE='mysql-bin.000123',
        MASTER_LOG_POS=456789;
  4. START SLAVE; 驗證 Seconds_Behind_Master = 0

關鍵優勢總結

指標LVM 快照mysqldumpXtraBackup
鎖表時間秒級 (建立快照)整個備份期間秒級 (FLUSH TABLES WITH READ LOCK)
備份速度受限於磁碟複製速度慢 (SQL 解析)快 (實體複製)
還原速度極快 (掛載/複製)慢 (SQL 重放)快
一致性崩潰一致性邏輯一致性崩潰一致性
工具依賴OS 原生MySQL 內建Percona 額外安裝

注意事項

  • 快照大小需 ≥ 備份期間寫入量,否則快照失效
  • InnoDB 需 innodb_flush_log_at_trx_commit=1、sync_binlog=1 確保持久性
  • 生產環境建議搭配 xtrabackup --slave-info 更完善
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved