Mysql

如何使用基於 VSS 的備份解決方案安全備份 MySQL

  • May 5, 2020

我的一個客戶在 Windows Server 2008 系統上執行 MySQL。他們的定期備份是使用 StorageCraft 的 ShadowCopy 執行的,它使用 VSS 服務來執行打開文件的備份。

一些調查表明 MySQL 並不完全支持 VSS,並且需要在影子操作之前鎖定表,然後再解鎖。在http://forum.storagecraft.com/Community/forums/p/548/2702.aspx有一個文章指出需要執行的步驟,但是使用者在執行這些步驟時遇到了一些困難並且沒有後續解決方案曾經張貼過。具體來說,他們成功地編寫了一個批處理文件來鎖定數據庫,但是一旦批處理文件從 MySQL 返回,它就會斷開連接並因此放棄鎖定。

我正在尋找一種可以發送 MySQL 命令FLUSH TABLES WITH READ LOCK,然後執行備份,然後UNLOCK TABLES在備份完成時發送的方法。

或者,我可以從備份中排除 MySQL 數據儲存文件夾,並將mysqldump備份安排到一個文件夾中,然後由 VSS 備份。

請問我可以有一些建議嗎?

由於 MySQL 指令“system”或“!”僅在 linux 下有效,因此您無法停止服務,請獲取您的 vss 快照並啟動服務。

system 命令將允許從 mysql 中獲取 vss 快照,這樣您就不會失去鎖。我相信它用於 LVM 快照備份。

遲到的答案,但我想我已經找到了辦法。至少,當我以這種方式恢復我的副本時,它沒有抱怨 InnoDB 日誌序列在未來或指責我不正確地關閉伺服器 - 儘管它確實認為發生了崩潰並使用二進制日誌恢復。YMMV,在你依賴它們之前測試你的備份。

編輯:也不確定這對 ShadowProtect 有多大幫助,但也許看看您是否可以從命令行啟動備份過程並將其作為計劃任務執行。如果您希望在本地使用 VSS,這肯定會有所幫助。

這是我使用的批處理文件,稱為flush_lock_vss.bat- M 和 L 驅動器分別用於數據和二進制日誌:

@echo off

echo FLUSH TABLES WITH READ LOCK;

vssadmin create shadow /for=m: >&2
vssadmin create shadow /for=l: >&2

echo UNLOCK TABLES;
echo \q

將其輸入到一個mysql程序中 - 當然,以管理員身份執行它:

C:\where\you\are> flush_lock_vss | C:\path\to\mysql-install\bin\mysql.exe -u username --password=TotallySecretPwd!

您將看到 vssadmin 命令的輸出,但FLUSHandUNLOCK命令將發送到您的 MySQL 實例。

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