Zarządzanie bazami 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 zarządzania kopią zapasową 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.

Uwaga

Jeśli użyłeś kopii zapasowej bazy danych SQL na platformie Azure przy użyciu interfejsu wiersza polecenia, używasz następujących zasobów:

  • Grupa zasobów o nazwie SQLResourceGroup
  • Magazyn o nazwie SQLVault
  • Chroniony kontener o nazwie VMAppContainer;Obliczenia;SQLResourceGroup;testSQLVM
  • Kopia zapasowa bazy danych/elementu o nazwie sqldatabase;mssqlserver;master
  • Zasoby w regionie westus2

Interfejs wiersza polecenia platformy Azure ułatwia zarządzanie bazą danych SQL działającą na maszynie wirtualnej platformy Azure, która jest tworzona przy użyciu usługi Azure Backup. W poniższych sekcjach opisano poszczególne operacje zarządzania.

Aby wyświetlić scenariusze tworzenia kopii zapasowych i przywracania, które obecnie obsługujemy, zobacz macierz wsparcia. Często zadawane pytania można znaleźć w często zadawanych pytaniach.

Monitorowanie zadań tworzenia kopii zapasowych i przywracania

Użyj polecenia az backup job list , aby monitorować ukończone lub aktualnie uruchomione zadania (tworzenie kopii zapasowej lub przywracanie). Interfejs wiersza polecenia umożliwia również zawieszenie aktualnie uruchomionego zadania lub oczekiwanie na zakończenie zadania.

az backup job list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  Operation              Status      Item Name       			Start Time UTC
------------------------------------  ---------------        ---------   ----------      			-------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup        Completed   master [testSQLVM]         2019-12-03T03:09:210831+00:00  
ccdb4dce-8b15-47c5-8c46-b0985352238f  Backup (Full)          Completed   master [testSQLVM]   		2019-12-01T10:30:58.867489+00:00
4980af91-1090-49a6-ab96-13bc905a5282  Backup (Differential)  Completed   master [testSQLVM]			2019-12-01T10:36:00.563909+00:00
F7c68818-039f-4a0f-8d73-e0747e68a813  Restore (Log)          Completed   master [testSQLVM]			2019-12-03T05:44:51.081607+00:00

Zmienianie zasad

Aby zmienić zasady bazowe konfiguracji kopii zapasowej SQL, użyj polecenia az backup policy set . Parametr nazwa w tym poleceniu odnosi się do elementu kopii zapasowej, którego zasady chcesz zmienić. W tym miejscu zamień politykę bazy danych SQL sqldatabase;mssqlserver;master na nową politykę newSQLPolicy. Nowe zasady można utworzyć za pomocą polecenia az backup policy create .

az backup item set-policy --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name newSQLPolicy \
    --name sqldatabase;mssqlserver;master 

Dane wyjściowe są wyświetlane jako:

Name                                  Operation        Status     Item Name    Backup Management Type    Start Time UTC                    Duration
------------------------------------  ---------------  ---------  -----------  ------------------------  --------------------------------  --------------
ba350996-99ea-46b1-aae2-e2096c1e28cd  ConfigureBackup  Completed  master       AzureWorkload             2022-06-22T08:24:03.958001+00:00  0:01:12.435765

Tworzenie zasad różnicowej kopii zapasowej

Aby utworzyć politykę różnicowej kopii zapasowej, użyj polecenia az backup policy create z następującymi parametrami:

  • --backup-management-type: Obciążenie platformy Azure.
  • --workload-type: Baza danych SQL.
  • --name: nazwa zasad.
  • --policy: plik JSON z odpowiednimi szczegółami dotyczącymi harmonogramu i przechowywania.
  • --resource-group: Grupa zasobów skarbca.
  • --vault-name: nazwa skarbca/

Przykład:

az backup policy create --resource-group SQLResourceGroup --vault-name SQLVault --name SQLPolicy --backup-management-type AzureWorkload --policy SQLPolicy.json --workload-type SQLDataBase

Przykładowy JSON (SQLPolicy.json):

  {"eTag": null,
  "id": "/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupPolicies/SQLPolicy",
  "location": null,
  "name": "sqlpolicy",
  "properties": {
    "backupManagementType": "AzureWorkload",
    "workLoadType": "SQLDataBase",
    "settings": {
      "timeZone": "UTC",
      "issqlcompression": false,
      "isCompression": false
    },
    "subProtectionPolicy": [
      {
        "policyType": "Full",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Sunday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T19:30:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "LongTermRetentionPolicy",
          "weeklySchedule": {
            "daysOfTheWeek": [
              "Sunday"
            ],
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 104,
              "durationType": "Weeks"
            }
          },
          "monthlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 60,
              "durationType": "Months"
            }
          },
          "yearlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "monthsOfYear": [
              "January"
            ],
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 10,
              "durationType": "Years"
            }
          }
        }
      },
      {
        "policyType": "Differential",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T02:00:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 30,
            "durationType": "Days"
          }
        }
      },
      {
        "policyType": "Log",
        "schedulePolicy": {
          "schedulePolicyType": "LogSchedulePolicy",
          "scheduleFrequencyInMins": 120
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 15,
            "durationType": "Days"
          }
        }
      }
    ],
    "protectedItemsCount": 0
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupPolicies"
} 

Po pomyślnym utworzeniu zasad dane wyjściowe polecenia pokazują kod JSON zasad przekazany jako parametr podczas wykonywania polecenia.

Możesz zmodyfikować następującą sekcję zasad, aby określić wymaganą częstotliwość tworzenia i czas przechowywania różnicowych kopii zapasowych.

Na przykład:

{
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 30,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Przykład:

Jeśli chcesz mieć różnicowe kopie zapasowe tylko w sobotę i zachować je przez 60 dni, wykonaj następujące zmiany w zasadach:

  • Aktualizacja czasu przechowywania do 60 dni.
  • Określ tylko sobotę jako ScheduleRunDays.
 {
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 60,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Chroń nowe bazy danych dodane do wystąpienia SQL

Zarejestrowanie wystąpienia SQL w magazynie usługi Recovery Services automatycznie odnajduje wszystkie bazy danych w tym wystąpieniu.

Jeśli jednak później dodasz nowe bazy danych do wystąpienia SQL, użyj polecenia az backup protectable-item initialize. To polecenie umożliwia odnalezienie dodanych nowych baz danych.

az backup protectable-item initialize --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --workload-type SQLDataBase

Następnie użyj polecenia cmdlet az backup protectable-item list, aby wyświetlić wszystkie bazy danych wykryte w instancji SQL. Sprawdź lub przefiltruj ich stan ochrony. Gdy znajdziesz bazę danych, której chcesz wykonać kopię zapasową, zobacz Włącz tworzenie kopii zapasowej bazy danych SQL.

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--protectable-item-type SQLDataBase \
    --output table

Nowa baza danych, której kopia zapasowa ma zostać utworzona, jest wyświetlana na tej liście, która jest wyświetlana jako:

Name                            Protectable Item Type    ParentName    ServerName    IsProtected
---------------------------     ----------------------   ------------  -----------   ------------
sqldatabase;mssqlserver;db1     SQLDataBase              mssqlserver   testSQLVM	 NotProtected  
sqldatabase;mssqlserver;db2     SQLDataBase              mssqlserver   testSQLVM	 NotProtected

Zatrzymaj ochronę bazy danych SQL

Ochronę bazy danych SQL można zatrzymać w następujących procesach:

  • Zatrzymanie wszystkich przyszłych zadań tworzenia kopii zapasowych i usunięcie wszystkich punktów odzyskiwania.
  • Zatrzymaj wszystkie przyszłe zadania tworzenia kopii zapasowej i pozostaw punkty odzyskiwania bez zmian.

Jeśli zdecydujesz się opuścić punkty odzyskiwania, pamiętaj o następujących szczegółach:

  • Wszystkie punkty odzyskiwania pozostają nienaruszone, a wszystkie operacje przycinania są zatrzymywane po zatrzymaniu ochrony z zachowaniem danych.
  • Opłata zostanie naliczona za chronione wystąpienie i wykorzystaną pamięć masową.
  • Jeśli usuniesz źródło danych bez zatrzymania tworzenia kopii zapasowych, nowe kopie zapasowe nie powiodą się.

Poniżej opisano procesy zatrzymywania ochrony.

Zatrzymanie ochrony z zachowaniem danych

Aby zatrzymać ochronę z zachowaniem danych, użyj polecenia az backup protection disable.

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Aby sprawdzić stan tej operacji, użyj polecenia az backup job show .

Zatrzymywanie ochrony bez zachowywania danych

Aby zatrzymać ochronę bez przechowywania danych, użyj polecenia az backup protection disable .

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --delete-backup-data true \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Aby sprawdzić stan tej operacji, użyj polecenia az backup job show .

Wznów ochronę

Po zatrzymaniu ochrony bazy danych SQL z zachowaniem danych można wznowić ochronę później. Jeśli nie zachowasz danych kopii zapasowej, nie będzie można wznowić ochrony.

Aby wznowić ochronę, użyj polecenia az backup protection resume .

az backup protection resume --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name SQLPolicy \
    --item-name "<native-database-item-name>" \
    --output table

Dane wyjściowe są wyświetlane jako:

Name                                  ResourceGroup
------------------------------------  ---------------  
b2a7f108-1020-4529-870f-6c4c43e2bb9e  SQLResourceGroup

Aby sprawdzić stan tej operacji, użyj polecenia az backup job show .

Zarządzaj kopiami zapasowymi migawek instancji SQL

Następujące polecenia snapshot wykorzystują składnię PowerShell shell, a nie Bash. Zastąp symbole zastępcze i użyj wersji Azure CLI, która obsługuje opcje migawki pokazane w tym artykule. Uruchamiaj tylko zamierzoną operację. Przykłady retain-data i delete-data to alternatywy.

Wybierz magazyn i chronioną instancję

Skorzystaj z subskrypcji skarbca i grupy zasobów dla wspólnych argumentów:

$vaultSubscription = "<vault-subscription-id>"
$vaultRg = "<vault-rg>"
$vaultName = "<vault-name>"
$vaultArgs = @("--subscription", $vaultSubscription, "--resource-group", $vaultRg, "--vault-name", $vaultName)

az backup vault show --subscription $vaultSubscription --resource-group $vaultRg --name $vaultName
az backup container list @vaultArgs --backup-management-type AzureWorkload `
  --query "[].{Name:name,VM:properties.friendlyName}" --output table
$containerName = "<native-source-container-name>"
$sourceArgs = $vaultArgs + @("--container-name", $containerName, "--backup-management-type", "AzureWorkload")

Skopiuj dokładną nazwę kontenera z wyjścia. Wyświetl wszystkie instancje chronione przez migawki w magazynie, a następnie ogranicz listę do wybranego kontenera:

az backup item list @vaultArgs --backup-management-type AzureWorkload `
  --workload-type SQLInstance --output json
az backup item list @sourceArgs --workload-type SQLInstance --output json
$instanceItemName = "<native-protected-instance-item-name>"
az backup item show @sourceArgs --workload-type SQLInstance `
  --name $instanceItemName --output json
$instanceArgs = $sourceArgs + @("--item-name", $instanceItemName, "--workload-type", "SQLInstance")

Używaj natywnych nazw zwracanych przez usługę, zamiast konstruować nazwy kontenerów czy elementów. Aby uzyskać informacje o tworzeniu polityk i wyborze bazy danych, zobacz Konfigurowanie kopii zapasowej migawki instancji SQL.

Monitorowanie operacji migawek

Użyj nazwy zadania, którą zwraca operacja tworzenia kopii zapasowej, przywracania lub ochrony, aby sprawdzić jej status.

az backup job show @vaultArgs --name "<job-name>" --output json

Zatrzymaj ochronę i zachowaj dane

Potwierdź, że wybrany element jest właściwą instancją przed zakończeniem jego kopii zapasowych:

az backup protection disable @instanceArgs --delete-backup-data false

Ta operacja zatrzymuje tworzenie kopii zapasowej, zachowując jednocześnie istniejące dane kopii zapasowej. Przed kontynuowaniem przejrzyj komunikat potwierdzający.

Zatrzymaj ochronę i usuń dane

Warning

Poniżej opisano destrukcyjną metodę zamiast przechowywania danych kopii zapasowych. Przed złożeniem wniosku o usunięcie zweryfikowaj wybraną instancję i jej bazy danych. Niezmienność magazynu i ustawienia miękkiego usuwania mogą wpływać na sposób usuwania.

az backup protection disable @instanceArgs --delete-backup-data true

Odrejestruj kontener VM

Wyrejestruj kontener dopiero po tym, jak wszystkie chronione elementy przestaną być chronione i nie pozostaną dane kopii zapasowej. Ta operacja dotyczy całego kontenera aplikacji VM, a nie tylko jednej instancji czy bazy danych.

az backup container unregister @vaultArgs --container-name $containerName `
  --backup-management-type AzureWorkload

Informacje o zapytaniach o punkty odzyskiwania migawek i konfiguracjach przywracania znajdują się w artykule Przywracanie migawek instancji SQL.

Następne kroki