Azure VM での SQL Server Backup について

Azure Backup からは、Azure VM で実行されている SQL Server をバックアップする、ストリームベースの特別なソリューションがあります。 このソリューションは、ゼロインフラストラクチャ バックアップ、長期間保存、中央管理といった Azure Backup の長所と足並みをそろえるものです。 さらに、SQL Server だけには次の長所があります。

  1. 完全、差分、ログという全種類のバックアップに対応するワークロード対応バックアップ
  2. 15 分間の RPO (回復ポイントの目標) と頻繁に行われるログのバックアップ
  3. 特定の時点に復旧 (1 秒まで)
  4. 個々のデータベース レベルのバックアップと復元

Note

Azure VM の SQL データベースにおけるスナップショットベースのバックアップは現在プレビュー段階です。 このユニークなオファリングは、RTO を向上させ、サーバーへの影響を小さくするスナップショットの利点と、RPO を低くするための頻繁なログ バックアップの利点を組み合わせたものです。 ご質問またはアクセスについては、AskAzureBackupTeam@microsoft.com までお問い合わせください。

現在サポートされているバックアップと復元のシナリオを確認するには、サポート マトリックスを参照してください。

バックアップ プロセス

このソリューションでは、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 サービスによって暗号化され、ストレージ アカウント内に格納されます。

  • データ転送が完了すると、コーディネーターはバックアップ サービスを使用してコミットを確認します。

    SQL のバックアップ アーキテクチャ

開始する前に

開始する前に、次の要件を確認します。

  1. Azure で SQL Server インスタンスを稼働させていることを確認する。 マーケットプレースで SQL Server インスタンスをすばやく作成できます。
  2. 機能に関する考慮事項シナリオのサポートを確認する。
  3. このシナリオに関する一般的な質問を確認する。

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 を実行している場合にアクセス許可を付与するには、こちらを参照してください。

その他のすべてのバージョンでは、次の手順を使用してアクセス許可を修正します。

  1. SQL Server sysadmin アクセス許可があるアカウントを使用して、SQL Server Management Studio (SSMS) にサインインします。 特殊な権限が必要でない限り、Windows 認証が機能するはずです。

  2. SQL Server で、Security/Logins フォルダーを開きます。

    セキュリティ/ログイン フォルダーを開いてアカウントを表示する

  3. [ログイン] フォルダーを右クリックし、 [新しいログイン] を選択します。 [ログイン - 新規作成][検索] を選択します。

    [ログイン - 新規作成] ダイアログ ボックスで [検索] を選択する

  4. Windows 仮想サービス アカウント NT SERVICE\AzureWLBackupPluginSvc は、仮想マシンの登録と SQL 検出フェーズ中に作成済みです。 [選択するオブジェクト名を入力します] に示されているようにアカウント名を入力します。 [名前の確認] を選択して名前解決を行います。 [OK] を選択します。

    [名前の確認] を選択して不明なサービス名を解決する

  5. [サーバー ロール] で、sysadmin ロールが選択されていることを確認します。 [OK] を選択します。 この時点で、必要な権限が揃っているはずです。

    sysadmin サーバー ロールが選択されていることを確認する

  6. 次にデータベースを Recovery Services コンテナーと関連付けます。 Azure portal の [保護されたサーバー] 一覧で、エラー状態にあるサーバーを右クリックし、[DB の再検出] を選択します。

    サーバーに適切な権限があることを確認する

  7. [通知] 領域で進行状況をチェックします。 選択したデータベースが検出されたら、成功のメッセージが表示されます。

    デプロイの成功メッセージ

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 ログインを追加します。

  1. オブジェクト エクスプローラーで SQL Server インスタンスにアクセスします。

  2. [セキュリティ] -> [ログイン] に移動します

  3. [ログイン] を右クリックし、 [新しいログイン] を選択します

    SSMS を使用した新しいログイン

  4. [全般] タブに移動し、ログイン名として「NT AUTHORITY\SYSTEM」と入力します。

    SSMS のログイン名

  5. [サーバー ロール] に移動し、 [public] および [sysadmin] ロールを選択します。

    SSMS でのロールの選択

  6. [状態] に移動します。 データベース エンジンに接続するためのアクセス許可を付与し、ログインを有効にします。

    SSMS でのアクセス許可の付与

  7. [OK] を選択します。

  8. 同じ一連の手順 (上記の 1 から 7) を繰り返して、SQL Server インスタンスに NT Service\AzureWLBackupPluginSvc ログインを追加します。 ログインが既に存在する場合は、そのログインに sysadmin サーバー ロールがあることを確認します。また [状態] で、そのログインにデータベース エンジンに接続するためのアクセス許可が付与されていること、およびそのログインが有効になっていることを確認します。

  9. アクセス許可を付与した後、ポータルで DB を再検出します ([コンテナー]->[バックアップ インフラストラクチャ]->[Workload in Azure VM](Azure VM のワークロード))。

    Azure portal での DB の再検出

または、管理者モードで次の 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 コンテナーに同時に保存するようにバックアップを構成できるようになりました。

同時バックアップは次の手順で構成します。

  1. 場所 C:\Program Files\Azure Workload Backup\bin\plugins に移動し、PluginConfigSettings.json ファイルが存在しない場合はそれを作成します。

  2. キー EnableLocalDiskBackupForBackupTypes とキー LocalDiskBackupFolderPath を含むコンマ区切りのキー値エンティティを JSON ファイルに追加します。

    • EnableLocalDiskBackupForBackupTypes の下で、ローカルに保存するバックアップの種類を一覧表示します。

      たとえば、"完全" バックアップと "ログ" バックアップを格納する場合、["Full", "Log"] をメンションします。 ログ バックアップのみを格納するには、["Log"] をメンションします。

    • LocalDiskBackupFolderPath の下で、"ローカル フォルダーのパス" をメンションします。 JSON ファイルでパスをメンションするときは必ず "二重スラッシュ" を使用します。

      たとえば、ローカル バックアップの優先パスが E:\LocalBackup の場合、JSON のパスを E:\\LocalBackup としてメンションします。

      最終的な JSON は次のように表示されるはずです。

      {
         "EnableLocalDiskBackupForBackupTypes": ["Log"],
         "LocalDiskBackupFolderPath": "E:\\LocalBackup",
      }
      

      JSON ファイルに他にもエントリが既に入力されている場合、JSON ファイルの一番下で "閉じ中括弧の直前に" 上の 2 つのエントリを追加します。

  3. 通常の 1 時間ではなく変更をすぐに有効にするには、[TaskManager][サービス] の順に進み、AzureWLbackupPluginSvc を右クリックし、[停止] を選択します。

    注意事項

    このアクションにより、進行中のすべてのバックアップ ジョブが取り消されます。

    格納されているバックアップ ファイルの名前付け規則とファイルのフォルダー構造は {LocalDiskBackupFolderPath}\{SQLInstanceName}\{DatabaseName} になります。

    たとえば、SQL インスタンス MSSQLSERVER の下にデータベース Contoso がある場合、ファイルは E:\LocalBackup\MSSQLSERVER\Contoso にあります。

    ファイルの名前は VDI device set guid で、バックアップ操作に使用されます。

  4. LocalDiskBackupFolderPath の下のターゲット場所に NT Service\AzureWLBackupPluginSvc の "読み取り" アクセス許可と "書き込み" アクセス許可があるか確認します。

    注意

    ローカル 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
    

次のステップ