Memulihkan database SQL di mesin virtual Azure menggunakan Azure CLI
Azure CLI digunakan untuk membuat dan mengelola sumber daya Azure dari Baris Perintah atau melalui skrip. Artikel ini menjelaskan cara memulihkan database SQL yang dicadangkan di mesin virtual Azure menggunakan Azure CLI. Anda juga dapat melakukan tindakan ini menggunakan portal Azure.
Gunakan Azure Cloud Shell untuk menjalankan perintah CLI.
Artikel ini mengasumsikan Anda memiliki database SQL yang berjalan di mesin virtual Azure yang dicadangkan menggunakan Azure Backup. Jika Anda telah menggunakan Mencadangkan database SQL di Azure menggunakan CLI untuk mencadangkan database SQL, Anda menggunakan sumber daya berikut:
- Grup sumber daya bernama
SQLResourceGroup
. - Vault bernama
SQLVault
. - Kontainer terlindungi bernama
VMAppContainer;Compute;SQLResourceGroup;testSQLVM
. - Database/item yang dicadangkan bernama
sqldatabase;mssqlserver;master
. - Sumber daya di wilayah tersebut
westus
.
Catatan
Lihat matriks dukungan pencadangan SQL untuk mengetahui lebih lanjut tentang konfigurasi dan skenario yang didukung.
Melihat titik pemulihan untuk database yang dicadangkan
Untuk melihat daftar semua titik pemulihan untuk database, gunakan perintah az backup recoverypoint list sebagai:
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--output table
Daftar titik pemulihan muncul sebagai:
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
Daftar di atas berisi tiga titik pemulihan: masing-masing untuk cadangan penuh, diferensial, dan cadangan log.
Catatan
Anda juga dapat melihat titik awal dan akhir dari setiap rantai pencadangan log yang tidak terputus, menggunakan perintah az backup recoverypoint show-log-chain.
Prasyarat untuk memulihkan database
Pastikan prasyarat berikut ini terpenuhi sebelum memulihkan database:
- Anda dapat memulihkan database hanya ke instans SQL Server di wilayah yang sama.
- Instans target harus didaftarkan dengan vault yang sama dengan sumbernya.
Memulihkan database
Azure Backup dapat memulihkan database SQL Server yang berjalan di mesin virtual Azure sebagai:
- Memulihkan ke tanggal atau waktu tertentu (hingga tingkat detik) dengan menggunakan pencadangan log. Azure Backup secara otomatis menentukan pencadangan diferensial penuh yang sesuai dan rantai cadangan log yang diperlukan untuk pemulihan berdasarkan waktu yang dipilih.
- Memulihkan ke cadangan penuh atau diferensial tertentu untuk memulihkan ke titik pemulihan tertentu.
Untuk memulihkan database, gunakan perintah az restore restore-azurewl, yang memerlukan objek konfigurasi pemulihan sebagai salah satu input. Anda dapat membuat objek ini menggunakan perintah az backup recoveryconfig show. Objek konfigurasi pemulihan berisi semua detail untuk melakukan pemulihan. Salah satunya adalah mode pemulihan – OriginalWorkloadRestore atau AlternateWorkloadRestore.
Catatan
OriginalWorkloadRestore: Memulihkan data ke instans SQL Server yang sama dengan sumber aslinya. Opsi ini menimpa database asli. AlternateWorkloadRestore - Memulihkan database ke lokasi alternatif dan menyimpan database sumber asli.
Memulihkan ke lokasi alternatif
Untuk memulihkan database ke lokasi alternatif, gunakan AlternateWorkloadRestore sebagai mode pemulihan. Anda kemudian harus memilih titik pemulihan, yang dapat berupa titik waktu sebelumnya atau titik pemulihan sebelumnya.
Mari kita lanjutkan untuk memulihkan ke titik pemulihan sebelumnya. Lihat daftar titik pemulihan untuk database dan pilih titik yang ingin Anda pulihkan. Di sini, mari kita gunakan titik pemulihan dengan nama 7660777527047692711.
Dengan nama titik pemulihan di atas dan mode pemulihan, buat objek konfigurasi pemulihan menggunakan perintah az backup recoveryconfig show. Periksa parameter yang tersisa dalam perintah ini:
- --target-item-name: Nama yang akan digunakan oleh database yang dipulihkan. Dalam skenario ini, kami menggunakan nama restored_database.
- --target-server-name: Nama server SQL yang berhasil didaftarkan ke vault Layanan Pemulihan dan tetap berada di wilayah yang sama dengan database yang akan dipulihkan. Di sini, Anda memulihkan database ke server SQL yang sama yang telah Anda lindungi, bernama testSQLVM.
- --target-server-type: Untuk memulihkan database SQL, Anda harus menggunakan 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
Respons terhadap kueri di atas adalah objek konfigurasi pemulihan yang muncul sebagai:
{
"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": []
}
Sekarang, untuk memulihkan database, jalankan perintah az restore restore-azurewl. Untuk menggunakan perintah ini, masukkan output JSON di atas yang disimpan ke file bernama recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
Outputnya muncul sebagai:
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
Respons memberi Anda nama pekerjaan. Anda dapat menggunakan nama pekerjaan ini untuk melacak status pekerjaan menggunakan perintah az backup job show.
Memulihkan dan menimpa
Untuk memulihkan ke lokasi semula, gunakan OriginalWorkloadRestore sebagai mode pemulihan. Anda kemudian harus memilih titik pemulihan, yang dapat berupa titik waktu sebelumnya atau titik pemulihan sebelumnya.
Sebagai contoh, mari kita pilih titik waktu sebelumnya "28-11-2019-09:53:00" untuk dipulihkan. Anda dapat menyediakan titik pemulihan ini dalam format berikut: dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss. Untuk memilih titik waktu yang valid untuk memulihkan, gunakan perintah az backup recoverypoint show-log-chain, yang mencantumkan interval pencadangan rantai log yang tidak terputus.
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
Respons terhadap kueri di atas adalah objek konfigurasi pemulihan yang muncul sebagai:
{
"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"
}
Sekarang, untuk memulihkan database, jalankan perintah az restore restore-azurewl. Untuk menggunakan perintah ini, masukkan output JSON di atas yang disimpan ke file bernama recoveryconfig.json.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
Outputnya muncul sebagai:
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
Respons memberi Anda nama pekerjaan. Anda dapat menggunakan nama pekerjaan ini untuk melacak status pekerjaan menggunakan perintah az backup job show.
Memulihkan ke wilayah sekunder
Untuk memulihkan database ke wilayah sekunder, tentukan vault target dan server yang terletak di wilayah sekunder, dalam konfigurasi pemulihan.
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
Responsnya adalah objek konfigurasi pemulihan yang muncul sebagai:
{
"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": [],
}
Gunakan konfigurasi pemulihan ini dalam perintah az restore restore-azurewl. Pilih bendera --use-secondary-region
untuk memulihkan database ke wilayah sekunder.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name testSQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
Outputnya muncul sebagai:
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
Catatan
RPO agar data cadangan tersedia di wilayah sekunder adalah 12 jam. Oleh karena itu, ketika Anda mengaktifkan CRR, RPO untuk wilayah sekunder adalah 12 jam + durasi frekuensi log (yang dapat diatur ke minimal 15 menit).
Pulihkan sebagai file
Untuk memulihkan data cadangan sebagai file, bukan database, gunakan RestoreAsFiles sebagai mode pemulihan. Kemudian pilih titik pemulihan, yang dapat berupa titik waktu sebelumnya atau titik pemulihan sebelumnya. Setelah file dibuang ke jalur yang ditentukan, Anda dapat membawa file ini ke mesin SQL mana pun tempat Anda ingin memulihkannya sebagai database. Karena Anda dapat memindahkan semua file ini ke komputer mana pun, Anda sekarang dapat memulihkan data di seluruh langganan dan wilayah.
Di sini, pilih titik waktu sebelumnya 28-11-2019-09:53:00
untuk memulihkan dan lokasi untuk membuang file cadangan sebagai /home/sql/restoreasfiles
pada server SQL yang sama. Anda dapat menyediakan titik pemulihan ini dalam salah satu format berikut: dd-mm-yyyy atau dd-mm-yyyy-hh:mm:ss. Untuk memilih titik waktu yang valid untuk memulihkan, gunakan perintah az backup recoverypoint show-log-chain, yang mencantumkan interval pencadangan rantai log yang tidak terputus.
Dengan nama titik pemulihan di atas dan mode pemulihan, buat objek konfigurasi pemulihan menggunakan perintah az backup recoveryconfig show. Periksa setiap parameter yang tersisa dalam perintah ini:
- --target-container-name: Nama server SQL yang berhasil didaftarkan ke vault Layanan Pemulihan dan ada di wilayah yang sama dengan database yang akan dipulihkan. Mari pulihkan database sebagai file ke server SQL yang sama yang telah Anda lindungi, bernama hxehost.
- --rp-name: Untuk pemulihan titik waktu, nama titik pemulihan adalah 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
Respons terhadap kueri di atas adalah objek konfigurasi pemulihan yang muncul sebagai:
{
"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"
}
Sekarang, untuk memulihkan database sebagai file, jalankan perintah az restore restore-azurewl. Untuk menggunakan perintah ini, masukkan output JSON di atas yang disimpan ke file bernama recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--restore-config recoveryconfig.json \
--output json
Outputnya muncul sebagai:
{
"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"
}
Respons memberi Anda nama pekerjaan. Anda dapat menggunakan nama pekerjaan ini untuk melacak status pekerjaan menggunakan perintah az backup job show.
Catatan
Jika Anda tidak ingin memulihkan seluruh rantai tetapi hanya sebagian file, ikuti langkah-langkah seperti yang didokumentasikan di sini.
Pemulihan Lintas Langganan
Dengan Pemulihan Langganan Silang (CSR), Anda memiliki fleksibilitas memulihkan ke langganan apa pun dan brankas apa pun di bawah penyewa Anda jika izin pemulihan tersedia. Secara default, CSR diaktifkan pada semua vault Layanan Pemulihan (vault yang sudah ada dan yang baru dibuat).
Catatan
- Anda dapat memicu Pemulihan Langganan Silang dari vault Layanan Pemulihan.
- CSR hanya didukung untuk pencadangan berbasis streaming dan tidak didukung untuk pencadangan berbasis rekam jepret.
- Pemulihan Lintas Regional (CRR) dengan CSR tidak didukung.
az backup vault create
Tambahkan parameter cross-subscription-restore-state
yang memungkinkan Anda mengatur status CSR vault selama pembuatan dan pembaruan vault.
az backup recoveryconfig show
Tambahkan parameter --target-subscription-id
yang memungkinkan Anda menyediakan langganan target sebagai input saat memicu Pemulihan Langganan Silang untuk sumber data SQL atau HANA.
Contoh:
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}