Azure VM での SQL Server Backup について
Azure Backup からは、Azure VM で実行されている SQL Server をバックアップする、ストリームベースの特別なソリューションがあります。 このソリューションは、ゼロインフラストラクチャ バックアップ、長期間保存、中央管理といった Azure Backup の長所と足並みをそろえるものです。 さらに、SQL Server だけには次の長所があります。
- 完全、差分、ログという全種類のバックアップに対応するワークロード対応バックアップ
- 15 分間の RPO (回復ポイントの目標) と頻繁に行われるログのバックアップ
- 特定の時点に復旧 (1 秒まで)
- 個々のデータベース レベルのバックアップと復元
現在サポートされているバックアップと復元のシナリオを確認するには、サポート マトリックスを参照してください。
バックアップ プロセス
このソリューションでは、SQL ネイティブ API シリーズを活用して、SQL データベースのバックアップを作成します。
SQL Server VM (保護対象で、その中のデータベースに対してクエリを実行するもの) を指定すると、Azure Backup サービスにより、
AzureBackupWindowsWorkload
拡張機能という名前のワークロード バックアップ拡張機能が VM 上にインストールされます。この拡張機能は、コーディネーターと SQL プラグインで構成されています。 コーディネーターは、バックアップの構成、バックアップ、復元など、さまざまな操作のワークフローのトリガーを処理し、プラグインは実際のデータ フローを処理します。
この VM 上のデータベースを検出できるようにするために、Azure Backup により、アカウント
NT SERVICE\AzureWLBackupPluginSvc
が作成されます。 このアカウントはバックアップと復元に使用され、SQL sysadmin アクセス許可を必要とします。NT SERVICE\AzureWLBackupPluginSvc
アカウントは仮想サービス アカウントであるため、パスワードの管理は不要です。 Azure Backup では、データベースの検出と照会にNT AUTHORITY\SYSTEM
アカウントが使用されます。そのため、このアカウントは SQL 上でパブリック ログインである必要があります。 SQL Server VM を Azure Marketplace から作成しなかった場合、エラー UserErrorSQLNoSysadminMembership が発生する可能性があります。 これが発生した場合、こちらの手順に従ってください。選択したデータベースに対して保護の構成をトリガーすると、バックアップ サービスにより、コーディネーターに対してバックアップ スケジュールとその他のポリシーの詳細が設定されます。これにより、拡張機能が VM 内にローカルにキャッシュされます。
スケジュールされた時刻になると、コーディネーターがプラグインと通信し、VDI を使用して SQL サーバーからバックアップ データのストリーム配信を開始します。
プラグインは Recovery Services コンテナーに直接データを送信するため、ステージングの場所が必要ありません。 データは Azure Backup サービスによって暗号化され、ストレージ アカウント内に格納されます。
データ転送が完了すると、コーディネーターはバックアップ サービスを使用してコミットを確認します。
開始する前に
開始する前に、次の要件を確認します。
- Azure で SQL Server インスタンスを稼働させていることを確認する。 マーケットプレースで SQL Server インスタンスをすばやく作成できます。
- 機能に関する考慮事項とシナリオのサポートを確認する。
- このシナリオに関する一般的な質問を確認する。
VM のアクセス許可を設定する
SQL Server で検出を実行すると、Azure Backup により以下が行われます。
- AzureBackupWindowsWorkload 拡張機能を追加します。
- 仮想マシン上のデータベースを検出するために、NT SERVICE\AzureWLBackupPluginSvc アカウントが作成されます。 このアカウントはバックアップと復元に使用され、SQL sysadmin アクセス許可を必要とします。
- VM 上で実行されているデータベースを検出します。Azure Backup は NT AUTHORITY\SYSTEM アカウントを使用します。 このアカウントは SQL でのパブリック サインインである必要があります。
Azure Marketplace で SQL Server VM を作成しなかった場合、または SQL 2008 または 2008 R2 を使用している場合、UserErrorSQLNoSysadminMembership エラーが発生する可能性があります。
Windows 2008 R2 で SQL 2008 および 2008 R2 を実行している場合にアクセス許可を付与するには、こちらを参照してください。
その他のすべてのバージョンでは、次の手順を使用してアクセス許可を修正します。
SQL Server sysadmin アクセス許可があるアカウントを使用して、SQL Server Management Studio (SSMS) にサインインします。 特殊な権限が必要でない限り、Windows 認証が機能するはずです。
SQL Server で、Security/Logins フォルダーを開きます。
[ログイン] フォルダーを右クリックし、 [新しいログイン] を選択します。 [ログイン - 新規作成] で [検索] を選択します。
Windows 仮想サービス アカウント NT SERVICE\AzureWLBackupPluginSvc は、仮想マシンの登録と SQL 検出フェーズ中に作成済みです。 [選択するオブジェクト名を入力します] に示されているようにアカウント名を入力します。 [名前の確認] を選択して名前解決を行います。 [OK] を選択します。
[サーバー ロール] で、sysadmin ロールが選択されていることを確認します。 [OK] を選択します。 この時点で、必要な権限が揃っているはずです。
次にデータベースを Recovery Services コンテナーと関連付けます。 Azure portal の [保護されたサーバー] 一覧で、エラー状態にあるサーバーを右クリックし、[DB の再検出] を選択します。
[通知] 領域で進行状況をチェックします。 選択したデータベースが検出されたら、成功のメッセージが表示されます。
Note
SQL Server に SQL Server の複数のインスタンスがインストールされている場合は、すべての SQL インスタンスに NT Service\AzureWLBackupPluginSvc アカウントに対する sysadmin アクセス許可を追加する必要があります。
SQL sysadmin に SQL 2008 および SQL 2008 R2 のアクセス許可を付与する
SQL Server インスタンスに NT AUTHORITY\SYSTEM および NT Service\AzureWLBackupPluginSvc ログインを追加します。
オブジェクト エクスプローラーで SQL Server インスタンスにアクセスします。
[セキュリティ] -> [ログイン] に移動します
[ログイン] を右クリックし、 [新しいログイン] を選択します
[全般] タブに移動し、ログイン名として「NT AUTHORITY\SYSTEM」と入力します。
[サーバー ロール] に移動し、 [public] および [sysadmin] ロールを選択します。
[状態] に移動します。 データベース エンジンに接続するためのアクセス許可を付与し、ログインを有効にします。
[OK] を選択します。
同じ一連の手順 (上記の 1 から 7) を繰り返して、SQL Server インスタンスに NT Service\AzureWLBackupPluginSvc ログインを追加します。 ログインが既に存在する場合は、そのログインに sysadmin サーバー ロールがあることを確認します。また [状態] で、そのログインにデータベース エンジンに接続するためのアクセス許可が付与されていること、およびそのログインが有効になっていることを確認します。
アクセス許可を付与した後、ポータルで DB を再検出します ([コンテナー] -> [管理] -> [バックアップ インフラストラクチャ] -> Azure VM のワークロード)。
または、管理者モードで次の PowerShell コマンドを実行して、アクセス許可の付与を自動化できます。 インスタンス名は、既定では MSSQLSERVER に設定されます。 必要に応じて、スクリプトでインスタンス名引数を変更します。
param(
[Parameter(Mandatory=$false)]
[string] $InstanceName = "MSSQLSERVER"
)
if ($InstanceName -eq "MSSQLSERVER")
{
$fullInstance = $env:COMPUTERNAME # In case it is the default SQL Server Instance
}
else
{
$fullInstance = $env:COMPUTERNAME + "\" + $InstanceName # In case of named instance
}
try
{
sqlcmd.exe -S $fullInstance -Q "sp_addsrvrolemember 'NT Service\AzureWLBackupPluginSvc', 'sysadmin'" # Adds login with sysadmin permission if already not available
}
catch
{
Write-Host "An error occurred:"
Write-Host $_.Exception|format-list -force
}
try
{
sqlcmd.exe -S $fullInstance -Q "sp_addsrvrolemember 'NT AUTHORITY\SYSTEM', 'sysadmin'" # Adds login with sysadmin permission if already not available
}
catch
{
Write-Host "An error occurred:"
Write-Host $_.Exception|format-list -force
}
同時バックアップを構成する
SQL Server の復旧ポイントとログをローカル ストレージと Recovery Services コンテナーに同時に保存するようにバックアップを構成できるようになりました。
同時バックアップは次の手順で構成します。
場所
C:\Program Files\Azure Workload Backup\bin\plugins
に移動し、PluginConfigSettings.json ファイルが存在しない場合はそれを作成します。キー
EnableLocalDiskBackupForBackupTypes
とキーLocalDiskBackupFolderPath
を含むコンマ区切りのキー値エンティティを JSON ファイルに追加します。EnableLocalDiskBackupForBackupTypes
の下で、ローカルに保存するバックアップの種類を一覧表示します。たとえば、"完全" バックアップと "ログ" バックアップを格納する場合、
["Full", "Log"]
をメンションします。 ログ バックアップのみを格納するには、["Log"]
をメンションします。LocalDiskBackupFolderPath
の下で、"ローカル フォルダーのパス" をメンションします。 JSON ファイルでパスをメンションするときは必ず "二重スラッシュ" を使用します。たとえば、ローカル バックアップの優先パスが
E:\LocalBackup
の場合、JSON のパスをE:\\LocalBackup
としてメンションします。最終的な JSON は次のように表示されるはずです。
{ "EnableLocalDiskBackupForBackupTypes": ["Log"], "LocalDiskBackupFolderPath": "E:\\LocalBackup", }
JSON ファイルに他にもエントリが既に入力されている場合、JSON ファイルの一番下で "閉じ中括弧の直前に" 上の 2 つのエントリを追加します。
通常の 1 時間ではなく変更をすぐに有効にするには、[TaskManager]、[サービス] の順に進み、AzureWLbackupPluginSvc を右クリックし、[停止] を選択します。
注意事項
このアクションにより、進行中のすべてのバックアップ ジョブが取り消されます。
格納されているバックアップ ファイルの名前付け規則とファイルのフォルダー構造は
{LocalDiskBackupFolderPath}\{SQLInstanceName}\{DatabaseName}
になります。たとえば、SQL インスタンス
MSSQLSERVER
の下にデータベースContoso
がある場合、ファイルはE:\LocalBackup\MSSQLSERVER\Contoso
にあります。ファイルの名前は
VDI device set guid
で、バックアップ操作に使用されます。LocalDiskBackupFolderPath
の下のターゲット場所にNT Service\AzureWLBackupPluginSvc
の "読み取り" アクセス許可と "書き込み" アクセス許可があるか確認します。Note
ローカル VM ディスク上のフォルダーについては、フォルダーを右クリックし、[セキュリティ] タブで
NT Service\AzureWLBackupPluginSvc
の必須アクセス許可を構成します。ネットワークまたは SMB 共有を使用している場合、共有にアクセスする許可を既に与えられているユーザー コンソールから下の PowerShell コマンドレットを実行してアクセス許可を構成します。
$cred = Get-Credential New-SmbGlobalMapping -RemotePath <FileSharePath> -Credential $cred -LocalPath <LocalDrive>: -FullAccess @("<Comma Separated list of accounts>") -Persistent $true
例:
$cred = Get-Credential New-SmbGlobalMapping -RemotePath \\i00601p1imsa01.file.core.windows.net\rsvshare -Credential $cred -LocalPath Y: -FullAccess @("NT AUTHORITY\SYSTEM","NT Service\AzureWLBackupPluginSvc") -Persistent $true