SQL-databases herstellen in een Azure-VM met behulp van Azure CLI
Azure CLI wordt gebruikt voor het maken en beheren van Azure-resources vanaf de opdrachtregel of door middel van scripts. In dit artikel wordt beschreven hoe u een back-up van een SQL-database op een Azure-VM herstelt met behulp van Azure CLI. U kunt deze acties ook uitvoeren met behulp van Azure Portal.
Gebruik Azure Cloud Shell voor het uitvoeren van CLI-opdrachten.
In dit artikel wordt ervan uitgegaan dat u een SQL-database hebt die wordt uitgevoerd op een Azure-VM waarvan een back-up wordt gemaakt met behulp van Azure Backup. Als u back-ups hebt gemaakt van een SQL-database in Azure met behulp van CLI om een back-up te maken van uw SQL-database, gebruikt u de volgende resources:
- Een resourcegroep met de naam
SQLResourceGroup
. - Een kluis met de naam
SQLVault
. - Beveiligde container met de naam
VMAppContainer;Compute;SQLResourceGroup;testSQLVM
. - Een back-up maken van database/item met de naam
sqldatabase;mssqlserver;master
. - Resources in de
westus
regio.
Notitie
Zie de ondersteuningsmatrix voor SQL-back-ups voor meer informatie over de ondersteunde configuraties en scenario's.
Herstelpunten weergeven voor een back-up van een database
Als u de lijst met alle herstelpunten voor een database wilt weergeven, gebruikt u de opdracht az backup recoverypoint list als:
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--output table
De lijst met herstelpunten wordt weergegeven als:
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
De bovenstaande lijst bevat drie herstelpunten: elk voor volledige, differentiële en logboekback-up.
Notitie
U kunt ook de begin- en eindpunten van elke niet-verbroken logboekback-upketen weergeven met behulp van de opdracht az backup recoverypoint show-log-chain .
Vereisten voor het herstellen van een database
Zorg ervoor dat aan de volgende vereisten wordt voldaan voordat u een database herstelt:
- U kunt de database alleen herstellen naar een SQL-exemplaar in dezelfde regio.
- Het doelexemplaren moeten worden geregistreerd bij dezelfde kluis als de bron.
Een database herstellen
Azure Backup kan SQL-databases herstellen die worden uitgevoerd op Virtuele Azure-machines als:
- Herstel naar een specifieke datum of tijd (op de seconde) met behulp van logboekback-ups. Azure Backup bepaalt automatisch de juiste keten van volledige back-ups, differentiële back-ups en logboekback-ups die nodig zijn voor het herstellen op basis van de geselecteerde tijd.
- Herstel naar een specifieke volledige of differentiële back-up om naar een specifiek herstelpunt te herstellen.
Als u een database wilt herstellen, gebruikt u de opdracht az restore restore-azurewl , waarvoor een herstelconfiguratieobject is vereist als een van de invoerwaarden. U kunt dit object genereren met behulp van de opdracht az backup recoveryconfig show . Het herstelconfiguratieobject bevat alle details voor het uitvoeren van een herstelbewerking. Een van deze is de herstelmodus : OriginalWorkloadRestore of AlternateWorkloadRestore.
Notitie
OriginalWorkloadRestore: herstelt gegevens naar hetzelfde SQL-exemplaar als de oorspronkelijke bron. Met deze optie wordt de oorspronkelijke database overschreven. AlternateWorkloadRestore: hiermee herstelt u de database naar een alternatieve locatie en behoudt u de oorspronkelijke brondatabase.
Herstellen naar alternatieve locatie
Als u een database naar een andere locatie wilt herstellen, gebruikt u AlternateWorkloadRestore als herstelmodus. U moet vervolgens het herstelpunt kiezen. Dit kan een eerder tijdstip zijn of eventuele eerdere herstelpunten.
Laten we doorgaan met het herstellen naar een eerder herstelpunt. Bekijk de lijst met herstelpunten voor de database en kies het punt dat u wilt herstellen. Hier gaan we het herstelpunt gebruiken met de naam 7660777527047692711.
Maak met de bovenstaande naam van het herstelpunt en de herstelmodus het herstelconfiguratieobject met behulp van de opdracht az backup recoveryconfig show . Controleer de resterende parameters in deze opdracht:
- --target-item-name: de naam die moet worden gebruikt door de herstelde database. In dit scenario hebben we de naam restored_database gebruikt.
- --target-server-name: de naam van een SQL-server die is geregistreerd bij een Recovery Services-kluis en blijft dezelfde regio als de database die moet worden hersteld. Hier herstelt u de database naar dezelfde SQL-server die u hebt beveiligd, met de naam testSQLVM.
- --target-server-type: voor het herstellen van SQL-databases moet u SQLInstance gebruiken.
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
Het antwoord op de bovenstaande query is een herstelconfiguratieobject dat wordt weergegeven als:
{
"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": []
}
Voer nu de opdracht az restore-azurewl uit om de database te herstellen. Als u deze opdracht wilt gebruiken, voert u de bovenstaande JSON-uitvoer in die is opgeslagen in een bestand met de naam recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
De uitvoer wordt weergegeven als:
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
Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .
Herstellen en overschrijven
Als u wilt herstellen naar de oorspronkelijke locatie, gebruikt u OriginalWorkloadRestore als de herstelmodus. Vervolgens moet u het herstelpunt kiezen. Dit kan een eerder tijdstip of een van de vorige herstelpunten zijn.
Laten we bijvoorbeeld het vorige tijdstip 28-11-2019-09:53:00 kiezen om te herstellen. U kunt dit herstelpunt opgeven in de volgende indelingen: dd-mm-jjjj, dd-mm-jjjj-uu:mm:ss. Als u een geldig tijdstip wilt kiezen om te herstellen, gebruikt u de opdracht az backup recoverypoint show-log-chain , waarin de intervallen van niet-verbroken back-ups van logboekketens worden vermeld.
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
Het antwoord op de bovenstaande query is een herstelconfiguratieobject dat wordt weergegeven als:
{
"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"
}
Voer nu de opdracht az restore-azurewl uit om de database te herstellen. Als u deze opdracht wilt gebruiken, voert u de bovenstaande JSON-uitvoer in die is opgeslagen in een bestand met de naam recoveryconfig.json.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
De uitvoer wordt weergegeven als:
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
Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .
Herstellen naar een secundaire regio
Als u een database wilt herstellen naar de secundaire regio, geeft u een doelkluis en server op die zich in de secundaire regio bevinden, in de herstelconfiguratie.
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
Het antwoord is een herstelconfiguratieobject dat wordt weergegeven als:
{
"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": [],
}
Gebruik deze herstelconfiguratie in de opdracht az restore-azurewl . Selecteer de --use-secondary-region
vlag om de database te herstellen naar de secundaire regio.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name testSQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
De uitvoer wordt weergegeven als:
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
Notitie
De RPO voor de back-upgegevens die beschikbaar zijn in de secundaire regio is 12 uur. Wanneer u CRR inschakelt, is de RPO voor de secundaire regio daarom 12 uur + duur van de logboekfrequentie (die kan worden ingesteld op minimaal 15 minuten).
Herstellen als bestanden
Als u de back-upgegevens wilt herstellen als bestanden in plaats van een database, gebruikt u RestoreAsFiles als de herstelmodus. Kies vervolgens het herstelpunt, dat een eerder tijdstip of een eerder herstelpunt kan zijn. Zodra de bestanden naar een opgegeven pad zijn gedumpt, kunt u deze bestanden naar elke SQL-machine brengen waar u ze als database wilt herstellen. Omdat u deze bestanden naar een willekeurige machine kunt verplaatsen, kunt u de gegevens nu in abonnementen en regio's herstellen.
Kies hier het vorige tijdstip om te herstellen en de locatie voor het dumpen van back-upbestanden als /home/sql/restoreasfiles
op dezelfde SQL-server28-11-2019-09:53:00
. U kunt dit herstelpunt opgeven in een van de volgende indelingen: dd-mm-jjjj of dd-mm-jjjj-jjjj-uu:mm:ss. Als u een geldig tijdstip wilt kiezen om te herstellen, gebruikt u de opdracht az backup recoverypoint show-log-chain , waarin de intervallen van niet-verbroken back-ups van logboekketens worden vermeld.
Maak met de bovenstaande naam van het herstelpunt en de herstelmodus het herstelconfiguratieobject met behulp van de opdracht az backup recoveryconfig show . Controleer elk van de resterende parameters in deze opdracht:
- --target-container-name: de naam van een SQL-server die is geregistreerd bij een Recovery Services-kluis en aanwezig is in dezelfde regio als de database die moet worden hersteld. We gaan de database herstellen als bestanden naar dezelfde SQL-server die u hebt beveiligd, met de naam hxehost.
- --rp-name: Voor een herstel naar een bepaald tijdstip is de naam van het herstelpunt 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
Het antwoord op de bovenstaande query js een herstelconfiguratieobject dat wordt weergegeven als:
{
"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"
}
Als u de database nu wilt herstellen als bestanden, voert u de opdracht az restore restore-azurewl uit. Als u deze opdracht wilt gebruiken, voert u de JSON-uitvoer hierboven in die is opgeslagen in een bestand met de naam recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--restore-config recoveryconfig.json \
--output json
De uitvoer wordt weergegeven als:
{
"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"
}
Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .
Notitie
Als u de hele keten niet wilt herstellen, maar alleen een subset van bestanden, volgt u de stappen die hier worden beschreven.
Herstellen tussen abonnementen
Met CSR (Cross Subscription Restore) hebt u de flexibiliteit om te herstellen naar elk abonnement en elke kluis onder uw tenant als er herstelmachtigingen beschikbaar zijn. CSR is standaard ingeschakeld voor alle Recovery Services-kluizen (bestaande en nieuw gemaakte kluizen).
Notitie
- U kunt herstel tussen abonnementen activeren vanuit de Recovery Services-kluis.
- CSR wordt alleen ondersteund voor back-ups op basis van streaming en wordt niet ondersteund voor back-ups op basis van momentopnamen.
- CRR (Cross Regional Restore) met CSR wordt niet ondersteund.
az backup vault create
Voeg de parameter cross-subscription-restore-state
toe waarmee u de CSR-status van de kluis kunt instellen tijdens het maken en bijwerken van de kluis.
az backup recoveryconfig show
Voeg de parameter --target-subscription-id
toe waarmee u het doelabonnement kunt opgeven als invoer tijdens het activeren van herstel tussen abonnementen voor SQL- of HANA-gegevensbronnen.
Voorbeeld:
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}