Przywracanie baz danych SQL na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

\Interfejs wiersza polecenia platformy Azure służy do tworzenia zasobów platformy Azure i zarządzania nimi z poziomu wiersza polecenia lub za pośrednictwem skryptów. W tym artykule opisano sposób przywracania kopii zapasowej bazy danych SQL na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure. Te akcje można również wykonać przy użyciu Azure Portal.

Uruchamianie poleceń interfejsu wiersza polecenia przy użyciu usługi Azure Cloud Shell.

Ten artykuł obejmuje następujące zagadnienia:

  • Wyświetlanie punktów przywracania dla bazy danych, dla których utworzono kopię zapasową
  • Przywracanie bazy danych

W tym artykule założono, że masz bazę danych SQL działającą na maszynie wirtualnej platformy Azure, której kopia zapasowa jest tworzona przy użyciu Azure Backup. Jeśli do tworzenia kopii zapasowej bazy danych SQL na platformie Azure użyto interfejsu wiersza polecenia do utworzenia kopii zapasowej bazy danych SQL, użyjesz następujących zasobów:

  • Grupa zasobów o nazwie SQLResourceGroup.
  • Magazyn o nazwie SQLVault.
  • Chroniony kontener o nazwie VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Utworzono kopię zapasową bazy danych/elementu o nazwie sqldatabase;mssqlserver;master.
  • Zasoby w westus regionie.

Uwaga

Zobacz macierz obsługi kopii zapasowych SQL , aby dowiedzieć się więcej o obsługiwanych konfiguracjach i scenariuszach.

Wyświetlanie punktów przywracania dla bazy danych, dla których utworzono kopię zapasową

Aby wyświetlić listę wszystkich punktów odzyskiwania dla bazy danych, użyj polecenia az backup recoverypoint list jako:

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

Lista punktów odzyskiwania jest wyświetlana jako:

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

Powyższa lista zawiera trzy punkty odzyskiwania: każdy dla pełnej, różnicowej i kopii zapasowej dziennika.

Uwaga

Możesz również wyświetlić punkty początkowe i końcowe każdego łańcucha kopii zapasowych dziennika bez złamania za pomocą polecenia az backup recoverypoint show-log-chain .

Wymagania wstępne dotyczące przywracania bazy danych

Przed przywróceniem bazy danych upewnij się, że zostały spełnione następujące wymagania wstępne:

  • Bazę danych można przywrócić tylko do wystąpienia SQL w tym samym regionie.
  • Wystąpienie docelowe musi być zarejestrowane w tym samym magazynie co źródło.

Przywracanie bazy danych

Azure Backup można przywrócić bazy danych SQL, które są uruchomione na maszynach wirtualnych platformy Azure jako:

  • Przywróć do określonej daty lub godziny (do sekundy) przy użyciu kopii zapasowych dziennika. Azure Backup automatycznie określa odpowiednie pełne, różnicowe kopie zapasowe i łańcuch kopii zapasowych dziennika, które są wymagane do przywrócenia na podstawie wybranego czasu.
  • Przywracanie do określonej pełnej lub różnicowej kopii zapasowej w celu przywrócenia do określonego punktu odzyskiwania.

Aby przywrócić bazę danych, użyj polecenia az restore-azurewl , które wymaga obiektu konfiguracji odzyskiwania jako jednego z danych wejściowych. Ten obiekt można wygenerować za pomocą polecenia az backup recoveryconfig show . Obiekt konfiguracji odzyskiwania zawiera wszystkie szczegóły dotyczące wykonania przywracania. Jednym z nich jest tryb przywracania — OriginalWorkloadRestore lub AlternateWorkloadRestore.

Uwaga

OriginalWorkloadRestore: przywraca dane do tego samego wystąpienia SQL co oryginalne źródło. Ta opcja zastępuje oryginalną bazę danych. AlternateWorkloadRestore: przywraca bazę danych do lokalizacji alternatywnej i przechowuje oryginalną źródłową bazę danych.

Przywracanie do lokalizacji alternatywnej

Aby przywrócić bazę danych do lokalizacji alternatywnej, użyj polecenia AlternateWorkloadRestore jako trybu przywracania. Następnie należy wybrać punkt przywracania, który może być poprzednim punktem w czasie lub dowolnymi poprzednimi punktami przywracania.

Przejdźmy do przywracania do poprzedniego punktu przywracania. Wyświetl listę punktów przywracania dla bazy danych i wybierz punkt, który chcesz przywrócić. W tym miejscu użyjemy punktu przywracania o nazwie 7660777527047692711.

Przy użyciu powyższej nazwy punktu przywracania i trybu przywracania utwórz obiekt konfiguracji odzyskiwania za pomocą polecenia az backup recoveryconfig show . Sprawdź pozostałe parametry w tym poleceniu:

  • --target-item-name: nazwa, która ma być używana przez przywróconą bazę danych. W tym scenariuszu użyliśmy nazwy restored_database.
  • --target-server-name: nazwa serwera SQL, który został pomyślnie zarejestrowany w magazynie usługi Recovery Services i pozostaje w tym samym regionie co dla bazy danych do przywrócenia. W tym miejscu przywracasz bazę danych do tego samego serwera SQL, który jest chroniony, o nazwie testSQLVM.
  • --target-server-type: w przypadku przywracania baz danych SQL należy użyć klasy SQLInstance.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

Odpowiedź na powyższe zapytanie jest obiektem konfiguracji odzyskiwania, który jest wyświetlany jako:

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

Teraz, aby przywrócić bazę danych, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź powyższe dane wyjściowe JSON zapisane w pliku o nazwie recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

Odpowiedź zawiera nazwę zadania. Ta nazwa zadania służy do śledzenia stanu zadania za pomocą polecenia az backup job show .

Przywracanie i zastępowanie

Aby przywrócić do oryginalnej lokalizacji, użyj elementu OriginalWorkloadRestore jako trybu przywracania. Następnie należy wybrać punkt przywracania, który może być poprzednim punktem w czasie lub dowolnym z poprzednich punktów przywracania.

Na przykład wybierzmy poprzedni punkt w czasie "28-11-2019-09:53:00" do przywrócenia. Ten punkt przywracania można podać w następujących formatach: dd-mm-rrrr, dd-mm-yyyy-hh:mm:ss. Aby wybrać prawidłowy punkt w czasie do przywrócenia, użyj polecenia az backup recoverypoint show-log-chain , które wyświetla interwały niezłamanych kopii zapasowych łańcucha dzienników.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

Odpowiedź na powyższe zapytanie jest obiektem konfiguracji odzyskiwania, który jest wyświetlany jako:

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

Teraz, aby przywrócić bazę danych, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź powyższe dane wyjściowe JSON zapisane w pliku o nazwie recoveryconfig.json.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

Odpowiedź zawiera nazwę zadania. Możesz użyć tej nazwy zadania do śledzenia stanu zadania za pomocą polecenia az backup job show .

Przywracanie do regionu pomocniczego

Aby przywrócić bazę danych do regionu pomocniczego, określ docelowy magazyn i serwer znajdujący się w regionie pomocniczym w konfiguracji przywracania.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

Odpowiedź to obiekt konfiguracji odzyskiwania, który jest wyświetlany jako:

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

Użyj tej konfiguracji odzyskiwania w poleceniu az restore-azurewl . Wybierz flagę --use-secondary-region , aby przywrócić bazę danych do regionu pomocniczego.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Uwaga

Cel punktu odzyskiwania dla danych kopii zapasowej, który ma być dostępny w regionie pomocniczym, wynosi 12 godzin. W związku z tym po włączeniu funkcji CRR cel punktu odzyskiwania dla regionu pomocniczego wynosi 12 godzin i czas trwania częstotliwości rejestrowania (który można ustawić na co najmniej 15 minut).

Przywracanie jako pliki

Aby przywrócić dane kopii zapasowej jako pliki zamiast bazy danych, użyj polecenia RestoreAsFiles jako trybu przywracania. Następnie wybierz punkt przywracania, który może być poprzednim punktem w czasie lub poprzednimi punktami przywracania. Po zrzuceniu plików do określonej ścieżki możesz przełączyć te pliki na dowolną maszynę SQL, na której chcesz je przywrócić jako bazę danych. Ponieważ te pliki można przenieść na dowolną maszynę, możesz teraz przywrócić dane między subskrypcjami i regionami.

W tym miejscu wybierz poprzedni punkt w czasie 28-11-2019-09:53:00 do przywrócenia i lokalizację, w którym mają być zrzucane pliki kopii zapasowej, co /home/sql/restoreasfiles na tym samym serwerze SQL. Ten punkt przywracania można podać w jednym z następujących formatów: dd-mm-rrrr lub dd-mm-yyyy-hh:mm:ss. Aby wybrać prawidłowy punkt w czasie do przywrócenia, użyj polecenia az backup recoverypoint show-log-chain , które wyświetla interwały niezłamanych kopii zapasowych łańcucha dzienników.

Przy użyciu powyższej nazwy punktu przywracania i trybu przywracania utwórz obiekt konfiguracji odzyskiwania za pomocą polecenia az backup recoveryconfig show . Sprawdź każdy z pozostałych parametrów w tym poleceniu:

  • --target-container-name: nazwa serwera SQL, który został pomyślnie zarejestrowany w magazynie usługi Recovery Services i znajduje się w tym samym regionie co dla bazy danych, która ma zostać przywrócona. Przywróćmy bazę danych jako pliki do tego samego serwera SQL, który był chroniony, o nazwie hxehost.
  • --rp-name: w przypadku przywracania do punktu w czasie nazwa punktu przywracania to DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

Odpowiedź na powyższe zapytanie js obiektu konfiguracji odzyskiwania, który jest wyświetlany jako:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

Teraz, aby przywrócić bazę danych jako pliki, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź dane wyjściowe JSON powyżej zapisane w pliku o nazwie recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

Dane wyjściowe są wyświetlane jako:

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

Odpowiedź zawiera nazwę zadania. Możesz użyć tej nazwy zadania do śledzenia stanu zadania za pomocą polecenia az backup job show .

Uwaga

Jeśli nie chcesz przywracać całego łańcucha, ale tylko podzbioru plików, wykonaj kroki opisane tutaj.

Przywracanie między subskrypcjami

Dzięki funkcji przywracania między subskrypcjami (CSR) masz elastyczność przywracania do dowolnej subskrypcji i dowolnego magazynu w ramach dzierżawy, jeśli są dostępne uprawnienia do przywracania. Domyślnie żądanie CSR jest włączone we wszystkich magazynach usługi Recovery Services (istniejących i nowo utworzonych magazynach).

Uwaga

  • Możesz wyzwolić przywracanie między subskrypcjami z magazynu usługi Recovery Services.
  • Żądanie CSR jest obsługiwane tylko w przypadku kopii zapasowych opartych na strumieniu i nie jest obsługiwane w przypadku kopii zapasowych opartych na migawkach.
  • Przywracanie między regionami (CRR) z żądaniem CSR nie jest obsługiwane.
az backup vault create

Dodaj parametr cross-subscription-restore-state , który umożliwia ustawienie stanu CSR magazynu podczas tworzenia i aktualizowania magazynu.

az backup recoveryconfig show

Dodaj parametr --target-subscription-id , który umożliwia podanie subskrypcji docelowej jako danych wejściowych podczas wyzwalania przywracania między subskrypcjami dla źródeł danych SQL lub HANA.

Przykład:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

Następne kroki