Mysql

使用 LVM 快照備份位於 SAN 上的 MySQL。這是可行的嗎?

  • October 2, 2012

所以我正在研究 LVM 快照,這似乎是備份 mysql 的可行方法,因此它至少是崩潰一致的。

我的問題是我有 mysql 伺服器,其中 mysql 數據目錄位於 SAN 上,我想利用 mysql LUN 的陣列快照功能。

我在想我可以添加第二個 LUN,在其上創建一個 PV,將其添加到伺服器上的 VG,創建一個作為 mysql LV 快照的 LV 並掛載它。

此時,我可以將數據複製到我需要複製它的任何地方。

這部分很好,但需要時間來完成,並且取決於數據庫的大小,因為我必須實際複製數據。

創建快照後,我可以拍攝 mysql LUN 的陣列快照,然後釋放 LVM 快照並將其刪除嗎?

有人試過嗎?

我的理解是 LVM 快照後所做的更改儲存在快照 LV 上。它是否正確?

謝謝!

我完全看不出它有什麼問題。只需確保您有足夠的可用空間來lv保存快照,這樣您就不會沒有時間將文件複製到其他地方(否則快照將被刪除)。

MySQL 通過快照備份的典型過程是先用讀鎖刷新,然後啟動快照,然後釋放讀鎖。那時,您可以將/var/lib/mysql目錄複製到您想要的任何位置 - 並使用它做任何您想做的事情。

Percona 工作人員在這裡做了一篇很好的文章,http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

Percona LVM MySQL 備份指南

1)連接MySQL並執行FLUSH TABLES WITH READ LOCK

  1. 在保持連接打開執行時:lvcreate -L16G -s -n dbbackup /dev/Main/Data– 這將為邏輯卷 Main/Data 創建名為 dbbackup 的快照。您應該指定足夠的撤消空間來保存備份過程中的修改——在這種情況下,我指定了 16GB。如果您的撤消大小不夠大,快照將失效並且備份將被中止。

有時你可能會在這一步遇到錯誤,我最近看到的最常見的錯誤是:snapshot: required device-mapper target(s) not detected in your kernel – 這意味著預設情況下,你的核心中沒有載入快照模組你需要載入它,這是通過執行來完成的modprobe dm-snapshot

3)現在您已經創建了邏輯卷並且可以解鎖表,但在此之前您可能應該記錄通過執行完成的SHOW MASTER STATUS二進制日誌位置 - 這是您需要指向從該快照創建的 MySQL 從站的二進制日誌位置。

  1. 快照已創建,現在您要讓 MySQL Server 繼續執行,這通過執行UNLOCK TABLES或簡單地關閉連接來完成。

5)掛載備份文件系統:mount /dev/Main/dbbackup /mnt/backup

  1. 將數據複製到備份。通常,您可以在備份時跳過慢查詢日誌和錯誤日誌。你也可以跳過大部分二進制日誌——但是如果你的一些從伺服器遠遠落後,你可能想要保留一些最後的二進制日誌以防萬一,或者你可以假設在從備份恢復的情況下,你需要恢復從伺服器好吧,在備份過程中跳過二進制日誌。

  2. 解除安裝文件系統umount /mnt/backup

8)刪除快照:lvremove -f /dev/Main/dbbackup

如果你想基於這樣的快照創建從站,你需要執行幾個更簡單的步驟

  1. 提取/複製數據庫到從數據庫目錄。

  2. 啟動 MySQL 伺服器。等待它執行恢復。

  3. 使用 CHANGE MASTER TO 將 slave 指向保存的二進制日誌位置:將 master 更改為master_host="master", master_user="user", master_password="password", master_log_file="host-bin.000335", master_log_pos=401934686;

  4. 執行SLAVE START以重新啟動複製。

引用自:https://serverfault.com/questions/434177