Udostępnij za pomocą


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 witryny Azure Portal.

Użyj Azure Cloud Shell, aby uruchomić polecenia interfejsu CLI.

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 usługi Azure Backup. Jeśli wykonałeś kopię zapasową bazy danych SQL w Azure przez utworzenie kopii zapasowej bazy danych SQL przy użyciu CLI, używasz następujących zasobów:

  • Grupa zasobów o nazwie SQLResourceGroup.
  • Skarbiec o nazwie SQLVault.
  • Chroniony kontener o nazwie VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Kopia zapasowa bazy danych/elementu o nazwie sqldatabase;mssqlserver;master.
  • Zasoby w westus regionie.

Note

Aby dowiedzieć się więcej na temat obsługiwanych konfiguracji i scenariuszy, zobacz macierz wsparcia kopii zapasowych SQL.

Wyświetlanie punktów przywracania dla baz danych z kopii zapasowej

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 kopii zapasowej, kopii zapasowej różnicowej i kopii zapasowej logów.

Note

Możesz również wyświetlić punkty początkowe i końcowe każdego niezałamanego łańcucha kopii zapasowych dzienników przy użyciu 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 instancji SQL w regionie lokalnym lub w innym regionie, jeśli przywracanie między regionami jest aktywowane w skarbcu.
  • Wystąpienie docelowe musi być zarejestrowane w tym samym magazynie co źródło, z wyjątkiem przywracania między regionami i przywracania między subskrypcjami. .

Przywracanie bazy danych

Usługa Azure Backup może przywrócić bazy danych SQL uruchomione na maszynach wirtualnych platformy Azure jako:

  • Przywróć do określonej daty lub godziny (do sekundy) przy użyciu kopii zapasowych dziennika. Usługa Azure Backup automatycznie określa i zarządza odpowiednimi pełnymi, różnicowymi kopiami zapasowymi oraz łańcuchem kopii zapasowych dzienników, 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 wykonywania przywracania. Jednym z nich jest tryb przywracania — OriginalWorkloadRestore lub AlternateWorkloadRestore.

Note

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 alternatywnej lokalizacji i przechowuje oryginalną źródłową bazę danych.

Przywracanie do lokalizacji alternatywnej

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

Przejdźmy do przywrócenia 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 z nazwą 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 skrytce usługi Recovery Services i pozostaje w tym samym regionie, co baza danych, która ma zostać przywrócona. 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 to obiekt 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. Tej nazwy zadania można 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" w celu przywrócenia. Ten punkt przywracania można podać w następujących formatach: dd-mm-rrrr, dd-mm-rrrr-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 niepowiązanych 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 to obiekt 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. Tej nazwy zadania można użyć do śledzenia stanu zadania przy użyciu polecenia az backup job show .

Przywracanie do regionu pomocniczego

Aby przywrócić bazę danych do regionu zapasowego, określ docelowy magazyn i serwer znajdujący się w regionie zapasowym 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 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

Note

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

Przywróć 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ć wcześniejszym punktem czasowym lub jednym z wcześniejszych punktów przywracania. Gdy pliki zostaną wgrane do określonej ścieżki, możesz przenieść te pliki na dowolną maszynę SQL, aby je przywrócić jako bazę danych. Ponieważ można przenieść te pliki 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 oraz lokalizację, w której mają być zrzucane pliki kopii zapasowej jako /home/sql/restoreasfiles na tym samym serwerze SQL. Ten punkt przywracania można podać w jednym z następujących formatów: dd-mm-yyyy 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 niepowiązanych 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ź wszystkie pozostałe parametry w tym poleceniu:

  • --target-container-name: nazwa serwera SQL, który został pomyślnie zarejestrowany w magazynie Recovery Services i znajduje się w tym samym regionie co baza danych do przywrócenia. Przywróćmy bazę danych jako pliki do tego samego serwera SQL, który był chroniony, o nazwie hxehost.
  • --rp-name: dla przywracania do określonego 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 obiekt 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. Tej nazwy zadania można użyć do śledzenia stanu zadania przy użyciu polecenia az backup job show .

Note

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

Przywracanie subskrypcji między kontami

W przypadku funkcji przywracania między subskrypcjami (CSR) możesz elastycznie przywracać dane do dowolnej subskrypcji i dowolnej skrytki w dzierżawie, o ile są dostępne uprawnienia przywracania. Domyślnie CSR jest włączone we wszystkich magazynach Recovery Services (zarówno istniejących, jak i nowo utworzonych magazynach).

Note

  • Możesz wyzwolić przywracanie między subskrypcjami z magazynu usług odzyskiwania.
  • CSR jest obsługiwane tylko w przypadku kopii strumieniowej i nie jest obsługiwane w przypadku kopii migawkowej.
  • Przywracanie między regionami (CRR) z CSR nie jest obsługiwane.
az backup vault create

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

az backup recoveryconfig show

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

Example:

   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}

Next step