
我有一個 Proxmox 伺服器設置,其中包含將運行 MSSQL Express 的 Windows 10 來賓。 Windows 來賓已安裝並執行 QEMU 來賓代理程式。對於備份,我有一個運行 Proxmox Backup 的單獨伺服器,該伺服器已計劃每週對來賓進行一次完整備份(停止模式)。此外,我需要更頻繁的快照備份,幾乎沒有存取中斷,但是,由於資料不一致的可能性,簡單地「凍結」具有活動資料庫的檔案系統是有問題的。
如果這是 Linux 客戶機上的 MySQL,那麼已經有一個解決方案,即為 fsfreeze-hook 新增腳本,以至於有一個例子包含在回購協議中。但是,從我能找到的很少的具體資訊來看,QEMU 來賓代理的 Windows 版本似乎缺少整個功能。
如何在 Windows 上實作類似的來賓掛鉤腳本?理想情況下,應該在快照開始之前呼叫該腳本,以便將資料庫置於安全狀態以便拍攝快照。
答案1
您應該能夠使用 Windows 電腦上的腳本編寫快照vssadmin create shadow
。但請注意:
Windows 10 上的 vss 快照因快照資料損壞而無法使用(我在嘗試透過還原一些快照檔案時獲得了關於該問題的第一手經驗
ShadowExplorer
)任何現代資料庫引擎(讀:幾乎任何期望的
MyISAM
)都使用日誌和/或 WAL 來在斷電或崩潰一致的備份中倖存下來。
除了進行整個虛擬機器備份之外,如果可能的話,我建議在其他位置(即網路共用)定期進行腳本化資料庫轉儲。
答案2
我理解這裡的要求,但不幸的是,「另類」虛擬化平台要應對微軟的惡作劇並不容易。如果您認為 Citrix 也放棄了 xenserver 中的靜態快照,那麼您就會理解這裡的挑戰。
我想你可以嘗試透過 ssh 或 powershell 呼叫 vssadmin createshadow,但我實際上從未嘗試過。
我知道的唯一方法可靠地使用 Proxmox 之類的工具在企業層級維護 Windows VM 的備份有:
- 由於我們具體討論的是 SQL Server 計算機,因此您可以將資料分開,因為您使用 SQL Server 自己的功能進行備份。您可以使用任何作業系統,或只保留備用/複製 SQL Server 安裝(如果停止,則不會違反授權)。然而,你使用的是SQL Server Express,這很麻煩,因為你不能有計畫任務,所以你需要找別的東西。
- 從虛擬機器內部使用 Windows(伺服器)備份,也許與備份後快照的 ZFS 共用資料夾結合使用,以便您可以實際控制要從儲存管理端保留的歷史記錄;這是免費的,而且實際上效果很好;復原並不是最快的,因為您需要啟動 Windows 安裝 iso 並在虛擬機器內執行虛假的「裸機」復原。您需要啟動 SQL Server VSS 編寫器,這也應該為您提供 SQL Server 的一致備份,理論上。我經常在開發和測試環境中這樣做,但生產是一個不同的野獸,文件也不是最清晰的(感謝微軟,一如既往地干得好)。
- 使用其他經過認證的備份解決方案,這些解決方案比 Windows 備份效果更好,但同樣來自虛擬機器內部;如果您必須為大量虛擬機器購買許可證,那麼成本仍然很高,因此在這一點上我會考慮選擇大公司。
事實上,我知道您在問 Proxmox,但必須說的是,從專業角度來看,管理承載重要資料的 Windows 機器的最佳方法是使用 VMWare vSphere 或 Hyper-V 與 Veeam Backup;它是最昂貴的解決方案,但也是最酷的災難復原解決方案:例如,您可以從備份中運行機器,以及其他很酷的功能。我不是做廣告;我體驗過幾乎所有有意義的虛擬化平台,如果你使用 Windows,就是這樣。
答案3
現在,對於不可靠的方法為了專門在 Proxmox 下進行 SQL Server 備份,我正在修改我先前的答案以完全符合您的要求。我只是想強調這不是最佳實踐,但我已經看到即使使用 VMWare 也能做到這一點(這很愚蠢)。
你可以做的是:
在Windows中安裝OpenSSH伺服器,現在Windows已經有了
在 proxmox 備份中設定掛鉤(但您需要從命令列執行備份,而不是從 Web GUI 執行備份),如下所述:https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hook_scripts;這樣,我可以執行一個腳本,透過 SSH 在 Windows 虛擬機器內執行某些操作
我將執行的腳本不是 VSSADMIN,而是類似以下的腳本:
SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'"
或者它也可以是更複雜的東西,例如增量備份等。如果您喜歡 SQL 腳本,您也可以安裝此人的腳本來更好地處理備份:https://ola.hallengren.com/sql-server-backup.html。此時您將使用 Proxmox 備份備份。如果您等待緩衝區被刷新,那麼就保證是一致的(從專業的角度來看,這就是它不能被視為可靠的原因之一。)
然而,我不喜歡這個和之前做VSS快照的建議的原因是:
- 看起來太複雜了,你還在做一些不可靠的事情
- 事實上,如果我必須依賴 SQL Server VSS 編寫器服務(這是強制性的,否則就沒有任何一致性),我會恢復到之前使用 Windows 備份 + 儲存快照的建議,這比僅呼叫 VSS 更易於管理使用腳本並備份備份。
對於 Proxmox、XCP-ng 或其他下的 DB 機器,我從來沒有費心將它們作為機器進行備份;您只需要確保它們僅包含資料庫伺服器,因為如果它是某些關鍵應用程序,那麼通常應該如此。我認為備份這些機器是浪費時間。我總是備份到外部儲存(使用腳本、排程任務、mysqldump、SQL Server 代理程式、sqlcmd),因為我可以使用Docker 容器/VM 在幾分鐘內再次啟動,如果我確實需要進行災難恢復,我可以提前準備。還佔據了空間少了很多。