Återställa SQL-databaser på en virtuell Azure-dator med Hjälp av Azure CLI
Azure CLI används för att skapa och hantera Azure-resurser från kommandoraden eller via skript. Den här artikeln beskriver hur du återställer en säkerhetskopierad SQL-databas på en virtuell Azure-dator med Hjälp av Azure CLI. Du kan också utföra dessa åtgärder med hjälp av Azure-portalen.
Använd Azure Cloud Shell för att köra CLI-kommandon.
Den här artikeln förutsätter att du har en SQL-databas som körs på en virtuell Azure-dator som säkerhetskopieras med Hjälp av Azure Backup. Om du har använt Säkerhetskopiera en SQL-databas i Azure med CLI för att säkerhetskopiera din SQL-databas använder du följande resurser:
- En resursgrupp med namnet
SQLResourceGroup
. - Ett valv med namnet
SQLVault
. - Skyddad container med namnet
VMAppContainer;Compute;SQLResourceGroup;testSQLVM
. - Säkerhetskopierad databas/objekt med namnet
sqldatabase;mssqlserver;master
. - Resurser i
westus
regionen.
Kommentar
Mer information om konfigurationer och scenarier som stöds finns i stödmatrisen för SQL-säkerhetskopiering.
Visa återställningspunkter för en säkerhetskopierad databas
Om du vill visa listan över alla återställningspunkter för en databas använder du kommandot az backup recoverypoint list som:
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--output table
Listan över återställningspunkter visas som:
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
Listan ovan innehåller tre återställningspunkter: var och en för fullständig, differentiell och loggsäkerhetskopiering.
Kommentar
Du kan också visa start- och slutpunkterna för varje obruten loggsäkerhetskopieringskedja med kommandot az backup recoverypoint show-log-chain .
Förutsättningar för att återställa en databas
Kontrollera att följande krav uppfylls innan du återställer en databas:
- Du kan bara återställa databasen till en SQL-instans i samma region.
- Målinstansen måste registreras med samma valv som källan.
Återställ en databas
Azure Backup kan återställa SQL-databaser som körs på virtuella Azure-datorer som:
- Återställ till ett visst datum eller en viss tid (till den andra) med hjälp av loggsäkerhetskopior. Azure Backup avgör automatiskt lämpliga fullständiga differentiella säkerhetskopior och kedjan med loggsäkerhetskopior som krävs för återställning baserat på den valda tiden.
- Återställ till en specifik fullständig eller differentiell säkerhetskopia för att återställa till en specifik återställningspunkt.
Om du vill återställa en databas använder du kommandot az restore restore-azurewl , som kräver ett återställningskonfigurationsobjekt som en av indata. Du kan generera det här objektet med kommandot az backup recoveryconfig show . Återställningskonfigurationsobjektet innehåller all information för att utföra en återställning. En av dem är återställningsläget – OriginalWorkloadRestore eller AlternateWorkloadRestore.
Kommentar
OriginalWorkloadRestore: Återställer data till samma SQL-instans som den ursprungliga källan. Det här alternativet skriver över den ursprungliga databasen. AlternateWorkloadRestore: Återställer databasen till en alternativ plats och behåller den ursprungliga källdatabasen.
Återställa till en annan plats
Om du vill återställa en databas till en annan plats använder du AlternateWorkloadRestore som återställningsläge. Du måste sedan välja återställningspunkten, som kan vara en tidigare tidpunkt eller eventuella tidigare återställningspunkter.
Vi fortsätter med att återställa till en tidigare återställningspunkt. Visa listan över återställningspunkter för databasen och välj den punkt som du vill återställa. Här ska vi använda återställningspunkten med namnet 7660777527047692711.
Med namnet på återställningspunkten ovan och återställningsläget skapar du återställningskonfigurationsobjektet med kommandot az backup recoveryconfig show . Kontrollera de återstående parametrarna i det här kommandot:
- --target-item-name: Namnet som ska användas av den återställde databasen. I det här scenariot använde vi namnet restored_database.
- --target-server-name: Namnet på en SQL-server som har registrerats till ett Recovery Services-valv och förblir samma region som för den databas som ska återställas. Här återställer du databasen till samma SQL-server som du har skyddat med namnet testSQLVM.
- --target-server-type: För återställning av SQL-databaser måste du använda 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
Svaret på ovanstående fråga är ett återställningskonfigurationsobjekt som visas som:
{
"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": []
}
För att återställa databasen kör du kommandot az restore restore-azurewl . Om du vill använda det här kommandot anger du ovanstående JSON-utdata som sparas i en fil med namnet recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
Utdata visas som:
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
Svaret ger dig jobbnamnet. Du kan använda det här jobbnamnet för att spåra jobbstatusen med kommandot az backup job show .
Återställa och skriva över
Om du vill återställa till den ursprungliga platsen använder du OriginalWorkloadRestore som återställningsläge. Du måste sedan välja återställningspunkten, som kan vara en tidigare tidpunkt eller någon av de tidigare återställningspunkterna.
Vi kan till exempel välja den tidigare tidpunkten "28-11-2019-09:53:00" att återställa till. Du kan ange den här återställningspunkten i följande format: dd-mm-åååå, dd-mm-åååå-hh:mm:ss. Om du vill välja en giltig tidpunkt för återställning använder du kommandot az backup recoverypoint show-log-chain , som visar intervallen för obrutna säkerhetskopior av loggkedjan.
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
Svaret på ovanstående fråga är ett återställningskonfigurationsobjekt som visas som:
{
"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"
}
För att återställa databasen kör du kommandot az restore restore-azurewl . Om du vill använda det här kommandot anger du ovanstående JSON-utdata som sparas i en fil med namnet recoveryconfig.json.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
Utdata visas som:
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
Svaret ger dig jobbnamnet. Du kan använda det här jobbnamnet för att spåra jobbstatusen med kommandot az backup job show .
Återställa till en sekundär region
Om du vill återställa en databas till den sekundära regionen anger du ett målvalv och en server som finns i den sekundära regionen i återställningskonfigurationen.
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
Svaret är ett återställningskonfigurationsobjekt som visas som:
{
"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": [],
}
Använd den här återställningskonfigurationen i kommandot az restore restore-azurewl . --use-secondary-region
Välj flaggan för att återställa databasen till den sekundära regionen.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name testSQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
Utdata visas som:
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
Kommentar
RPO för säkerhetskopieringsdata som ska vara tillgängliga i den sekundära regionen är 12 timmar. När du aktiverar CRR är därför RPO för den sekundära regionen 12 timmar + loggfrekvensvaraktighet (som kan anges till minst 15 minuter).
Återställa som filer
Om du vill återställa säkerhetskopierade data som filer i stället för en databas använder du RestoreAsFiles som återställningsläge. Välj sedan återställningspunkten, som kan vara en tidigare tidpunkt eller eventuella tidigare återställningspunkter. När filerna har dumpats till en angiven sökväg kan du ta filerna till valfri SQL-dator där du vill återställa dem som en databas. Eftersom du kan flytta dessa filer till valfri dator kan du nu återställa data mellan prenumerationer och regioner.
Här väljer du den föregående tidpunkten för återställning och platsen där du kan dumpa säkerhetskopierade filer som /home/sql/restoreasfiles
på samma SQL-server28-11-2019-09:53:00
. Du kan ange den här återställningspunkten i något av följande format: dd-mm-åååå eller dd-mm-åååå-hh:mm:ss. Om du vill välja en giltig tidpunkt för återställning använder du kommandot az backup recoverypoint show-log-chain , som visar intervallen för obrutna säkerhetskopior av loggkedjan.
Med namnet på återställningspunkten ovan och återställningsläget skapar du återställningskonfigurationsobjektet med kommandot az backup recoveryconfig show . Kontrollera var och en av de återstående parametrarna i det här kommandot:
- --target-container-name: Namnet på en SQL-server som har registrerats till ett Recovery Services-valv och som finns i samma region som för databasen som ska återställas. Nu ska vi återställa databasen som filer till samma SQL-server som du har skyddat med namnet hxehost.
- --rp-name: För en återställning till tidpunkt är återställningspunktens namn 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
Svaret på frågan ovan js ett återställningskonfigurationsobjekt som visas som:
{
"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"
}
För att återställa databasen när filer kör kommandot az restore restore-azurewl . Om du vill använda det här kommandot anger du JSON-utdata ovan som sparas i en fil med namnet recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--restore-config recoveryconfig.json \
--output json
Utdata visas som:
{
"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"
}
Svaret ger dig jobbnamnet. Du kan använda det här jobbnamnet för att spåra jobbstatusen med kommandot az backup job show .
Kommentar
Om du inte vill återställa hela kedjan utan bara en delmängd filer följer du stegen som beskrivs här.
Återställning mellan prenumerationer
Med återställning mellan prenumerationer (CSR) har du flexibiliteten att återställa till valfri prenumeration och valv under klientorganisationen om återställningsbehörigheter är tillgängliga. Som standard är CSR aktiverat på alla Recovery Services-valv (befintliga och nyligen skapade valv).
Kommentar
- Du kan utlösa återställning mellan prenumerationer från Recovery Services-valvet.
- CSR stöds endast för direktuppspelningsbaserad säkerhetskopiering och stöds inte för ögonblicksbildsbaserad säkerhetskopiering.
- Cross Regional Restore (CRR) med CSR stöds inte.
az backup vault create
Lägg till parametern cross-subscription-restore-state
som gör att du kan ange CSR-tillståndet för valvet när valvet skapas och uppdateras.
az backup recoveryconfig show
Lägg till parametern --target-subscription-id
som gör att du kan ange målprenumerationen som indata när du utlöser återställning mellan prenumerationer för SQL- eller HANA-datakällor.
Exempel:
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}