LVM(Logical Volume Manager)快照功能可在不停機、不鎖表長時間的情況下,獲得資料檔案系統層面的一致性備份。結合 MySQL 的全域讀鎖與二進制日誌,可實現近乎熱備份的效果。本文詳細記錄操作流程、關鍵指令與還原驗證。
ibdata、.ibd、binlog、relaylog)必須位於**同一個 LVM 邏輯卷**上。mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000011 | 107 | | | +------------------+----------+--------------+------------------+

lvcreate -L 5G -s -n mysql_snap /dev/VG/mysql_data

mysql> UNLOCK TABLES;

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

備份期間資料庫持續寫入,新增的交易記錄在 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


| 階段 | 關鍵動作 | 目的 |
|---|---|---|
| 備份前 | FLUSH TABLES WITH READ LOCK + FLUSH LOGS | 確保磁碟上檔案一致、Binlog 位置可追溯 |
| 建立快照 | lvcreate -s | 秒級凍結檔案系統視圖,對資料庫幾乎無影響 |
| 備份中 | UNLOCK TABLES | 資料庫立即恢復服務,快照端離線複製檔案 |
| 還原時 | 複製快照資料 + mysqlbinlog 重放增量 | 達成時間點恢復(PITR),RPO 接近零 |
lvs 的 Data%,預留充足空間。-o nouuid 掛載選項避免 UUID 衝突。innodb_file_per_table 時,.ibd 檔案也在同一卷,無額外處理;若分離表空間到不同卷,**必須同時對所有卷建立快照**並確保順序一致。