
私は、MSSQL Express を実行する Windows 10 ゲストで Proxmox サーバーをセットアップしています。Windows ゲストには QEMU ゲスト エージェントがインストールされ、動作しています。バックアップ用に、Proxmox Backup を実行する別のサーバーがあり、これはゲストの完全バックアップを週に 1 回 (停止モード) 実行するようにスケジュール設定されています。さらに、アクセスの中断をほとんどまたはまったく行わずに、より頻繁にスナップショット バックアップを実行する必要がありますが、アクティブなデータベースでファイル システムを単に「フリーズ」するだけでは、データの不整合が発生する可能性があるため問題があります。
Linuxゲスト上のMySQLの場合、fsfreeze-hookにスクリプトを追加するという形ですでに解決策があり、例リポジトリに含まれています。しかし、私が見つけることができたわずかな具体的な情報から判断すると、この機能全体が QEMU ゲスト エージェントの Windows ビルドにはないようです。
Windows で同様のゲスト フック スクリプトを実現するにはどうすればよいですか? 理想的には、スナップショットが取得される安全な状態にデータベースを置くために、スナップショットの開始直前にスクリプトが呼び出されます。
答え1
Windows マシンでは、 を使用してスナップショットのスクリプトを作成できるはずですvssadmin create shadow
。ただし、次の点に注意してください。
Windows 10 の vss スナップショットは、スナップショット データの破損により使用できないという評判があります (私は、スナップショットされたファイルの一部を 経由で復元しようとしたときに、この問題を直接経験しました
ShadowExplorer
)。最新のデータベース エンジン ( を除くほぼすべてのエンジン
MyISAM
) は、ジャーナリングや WAL を使用して、電源喪失やクラッシュ整合性のあるバックアップにも問題なく対応します。
VM 全体のバックアップを取ることに加えて、可能であれば、他の場所 (ネットワーク共有など) で定期的にスクリプト化されたデータベース ダンプを実行することをお勧めします。
答え2
ここでの要件は理解していますが、残念ながら、「代替」仮想化プラットフォームが Microsoft の悪行に対処するのは容易ではありません。Citrix でさえ xenserver の静止スナップショットをあきらめたと考えると、ここでの課題が理解できます。
ssh または powershell 経由で vssadmin create shadow を呼び出すこともできると思いますが、実際に試したことはありません。
私が知っている唯一の方法は確実にProxmox のようなものを使用して企業レベルで Windows VM のバックアップを維持する方法は次のとおりです。
- ここでは特に SQL Server マシンについて話しているのですが、SQL Server 独自の機能を使用してバックアップするため、データは分離されています。OS は何でも使用できます。または、スペア/クローンの SQL Server インストールを保持しておくこともできます (停止してもライセンス違反にはなりません)。ただし、SQL Server Express を使用している場合、タスクをスケジュールできないため面倒です。そのため、別の方法を見つける必要があります。
- VM 内部から Windows (Server) バックアップを使用し、バックアップ後にスナップショットを作成する ZFS 共有フォルダと組み合わせると、ストレージ管理側から保持したい履歴を実際に制御できます。これは無料で、実際に非常にうまく機能します。Windows インストール ISO を起動し、VM 内で偽の「ベア メタル」復元を実行する必要があるため、回復は最速ではありません。SQL Server VSS ライターを起動する必要があります。これにより、SQL Server の一貫したバックアップも取得できます。理論的には開発環境とテスト環境ではこれを定期的に実行していますが、運用環境では状況が異なり、ドキュメントも明確ではありません (Microsoft に感謝します。いつものように素晴らしい仕事です)。
- Windows バックアップよりも優れた機能を持つ他の認定バックアップ ソリューションを使用しますが、これも VM 内部から行います。多数の VM のライセンスを購入する必要がある場合は依然としてコストがかかるため、この時点では大手企業を選択することを検討します。
実際、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 VM内で何かを実行するスクリプトを実行できます。
私が実行するスクリプトは VSSADMIN ではなく、次のようなものです:
SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'"
または、増分バックアップなどのより複雑なものになることもあります。SQL スクリプトに興味がある場合は、この人のスクリプトをインストールして、バックアップをより適切に処理することもできます。https://ola.hallengren.com/sql-server-backup.html。この時点で、Proxmox を使用してバックアップをバックアップします。バッファがフラッシュされるまで待てば、一貫性が保証されます (これが、専門家の観点から信頼できると見なせない理由の 1 つです)。
ただし、私がこれを好まない理由と、VSS スナップショットを実行するという以前の提案は次のとおりです。
- 複雑すぎるし、信頼性の低いことをしているようです
- 実際、SQL Server VSS ライター サービスに頼らなければならない場合 (これが必須で、そうでなければ一貫性がまったくありません)、スクリプトで VSS を呼び出してバックアップをバックアップするよりも全体的に管理しやすい、Windows バックアップ + ストレージ スナップショットを使用するという以前の提案に戻ります。
Proxmox、XCP-ngなどのDBマシンについては、マシンとしてバックアップすることは一度もありませんでした。重要なアプリケーションであれば一般的にそうであるように、DBサーバーのみが含まれていることを確認するだけで済みます。これらのマシンをバックアップするのは時間の無駄だと思います。私は常に外部ストレージにバックアップしています(スクリプト、スケジュールされたタスク、mysqldump、SQL Server Agent、sqlcmdを使用)。これは、本当に災害復旧が必要になった場合に、事前に準備できるDockerコンテナ/VMを使用して数分で再起動できるためです。また、スペースがかなり少なくなる。