LVM 快照可在**極短鎖表時間**內獲得資料檔一致性視圖,結合二進制日誌實現「近熱備份」。本文在單機環境完整演示:建立 LVM、遷移資料目錄、鎖表→快照→解鎖→備份→模擬故障→全量+增量恢復全流程。
mydatalv (VG: mydata) 掛載於 /data,容量 1G。/var/lib/mysql 複製至 /data/mysql。/etc/my.cnf:datadir=/data/mysql、log_bin=/var/lib/mysql/mysql-bin(binlog 置於非 LVM 盤)。lvs df -h cp -a /var/lib/mysql /data/ vim /etc/my.cnf systemctl restart mariadb ls /data/mysql # 確認檔案存在
mysql -e 'FLUSH TABLES WITH READ LOCK;' mysql -e 'FLUSH LOGS;' mysql -e 'SHOW MASTER STATUS;' > /root/back.$(date +%F+%T) cat /root/back.2016-07-13+10:14:29 # 輸出:mysql-bin.000014 245
lvcreate -L 1G -n mysqlback -p r -s /dev/mydata/mydatalv
mysql -e 'UNLOCK TABLES;'
mkdir /myback mount -r /dev/mydata/mysqlback /mnt cp -a /mnt/mysql /myback/ umount /mnt lvremove -f /dev/mydata/mysqlback # 釋放快照空間
INSERT INTO classes VALUES ('xxoo',39);rm -rf /data/*datadir、log_bin 皆指向 /data/mysql(恢復環境單盤)。/data:cp -a /myback/* /data/systemctl restart mariadbmysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000014 > /root/binlog.sql mysql < /root/binlog.sql
mysql -e "USE hellodb; SELECT * FROM classes;" # 輸出應包含 xxoo (ClassID=9),證明增量日誌成功回放
| 優勢 | 說明 |
|---|---|
| 鎖表時間極短 | 僅執行 FLUSH TABLES WITH READ LOCK + FLUSH LOGS + lvcreate,通常 < 1 秒,業務幾乎無感知 |
| 檔案系統級一致性 | 快照捕捉整個資料目錄瞬間狀態,含 .ibd、.frm、binlog.index 等所有檔案 |
| 不依賴引擎特性 | 適用 MyISAM/InnoDB/其他引擎混合場景 |
-L 參數。-r (ro) 保護備份檔不被誤改。