首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

使用 LVM Snapshot 實現 MySQL 資料庫熱備份完整實戰

     編輯:MySQL 綜合教學

使用 LVM Snapshot 實現 MySQL 資料庫熱備份完整實戰

LVM(Logical Volume Manager)快照功能可在不停機、不鎖表長時間的情況下,獲得資料檔案系統層面的一致性備份。結合 MySQL 的全域讀鎖與二進制日誌,可實現近乎熱備份的效果。本文詳細記錄操作流程、關鍵指令與還原驗證。

前置條件

  • 資料目錄(含 ibdata、.ibd、binlog、relaylog)必須位於**同一個 LVM 邏輯卷**上。
  • 檔案系統支援快照(ext4、xfs 皆可)。
  • 預留足夠的 VG 剩餘空間建立快照卷(建議至少 10%-20% 原卷大小)。

備份流程圖解

  1. 施加全域讀鎖並記錄 Binlog 位置
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000011 |      107 |              |                  |
    +------------------+----------+--------------+------------------+

    施加讀鎖與記錄 Binlog

  2. 建立 LVM 快照卷
    lvcreate -L 5G -s -n mysql_snap /dev/VG/mysql_data

    建立快照卷

  3. 釋放讀鎖(此時資料庫恢復寫入,快照已凍結一致性視圖)
    mysql> UNLOCK TABLES;

    釋放讀鎖

  4. 掛載快照、複製資料、移除快照
    mount -o ro /dev/VG/mysql_snap /mnt
    mkdir -p /mysqlback/$(date +%F)
    cp -a /mnt/* /mysqlback/$(date +%F)/
    umount /mnt
    lvremove -f /dev/VG/mysql_snap

    掛載複製移除快照

  5. 後續資料變更透過 Binlog 追趕

    備份期間資料庫持續寫入,新增的交易記錄在 Binlog 中。記錄備份時刻的 Binlog 位置(步驟 1 的 File + Position),還原時先載入快照資料,再重放該位置之後的 Binlog 即可達到時間點恢復(PITR)。

    # 導出備份時間點後的 Binlog
    mysqlbinlog --start-position=107 mysql-bin.000011 > /tmp/incremental.sql
    
    # 還原流程:停庫 → 刪除資料目錄 → 複製快照資料回原目錄 → 啟庫 → 重放 Binlog
    systemctl stop mysqld
    rm -rf /var/lib/mysql/*
    cp -a /mysqlback/2024-01-15/* /var/lib/mysql/
    systemctl start mysqld
    mysql -u root -p < /tmp/incremental.sql

    還原驗證

    Binlog 重放結果

關鍵點總結

階段關鍵動作目的
備份前FLUSH TABLES WITH READ LOCK + FLUSH LOGS確保磁碟上檔案一致、Binlog 位置可追溯
建立快照lvcreate -s秒級凍結檔案系統視圖,對資料庫幾乎無影響
備份中UNLOCK TABLES資料庫立即恢復服務,快照端離線複製檔案
還原時複製快照資料 + mysqlbinlog 重放增量達成時間點恢復(PITR),RPO 接近零

常見坑點

  • 快照空間不足導致快照失效:監控 lvs 的 Data%,預留充足空間。
  • XFS 檔案系統需加 -o nouuid 掛載選項避免 UUID 衝突。
  • InnoDB 啟用 innodb_file_per_table 時,.ibd 檔案也在同一卷,無額外處理;若分離表空間到不同卷,**必須同時對所有卷建立快照**並確保順序一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved