#sql-server #azure #powershell #azure-devops #database-backups
Вопрос:
Я пытаюсь создать политику резервного копирования для баз данных в Azure в качестве службы PAAS SQL server. Мне пришло в голову использовать PowerShell для резервного копирования баз данных внутри SQL Server, а затем загрузить его в учетную запись хранилища Azure.PowerShell будет работать на Azure Devops внутри агентов, размещенных Microsoft.
Но я в замешательстве по большинству вопросов, таких как:
- Как получить экземпляр этого SQL-сервера?
- Как создать новые учетные данные SQL для этой задачи, поскольку это зависит от задачи, о которой я говорил выше?
Пожалуйста, дайте свои ценные предложения.
Комментарии:
1. вы видели документацию ? docs.microsoft.com/en-us/azure/azure-sql/database/. … на самом деле вам не нужно все делать вручную
2. Есть ли какая-то часть существующих функций автоматического резервного копирования, которая не отвечает вашим потребностям? docs.microsoft.com/en-us/azure/azure-sql/database/…
3. Спасибо, что поделились ссылкой, по которой я прошел ранее. На самом деле, это требование бизнеса, поскольку они решили какую-то проблему, возможно, это было что-то вроде удаления группы ресурсов или что-то в этом роде.
Ответ №1:
Я бы рекомендовал вам использовать Azure Automation и Runbook для такого рода вещей. Здесь у вас есть пример RunBook для выполнения резервного копирования.
param(
[parameter(Mandatory=$true)]
[String] $AutomationConnection,
[parameter(Mandatory=$true)]
[String] $SubscriptionName,
[parameter(Mandatory=$true)]
[String]$StorageAccount,
[parameter(Mandatory=$true)]
[String]$BlobContainer,
[parameter(Mandatory=$true)]
[String]$StorageKey,
[parameter(Mandatory=$true)]
[String]$StorageKeytype = "StorageAccessKey",
[parameter(Mandatory=$true)]
[String]$DbName,
[parameter(Mandatory=$true)]
[String]$ResourceGroupName,
[parameter(Mandatory=$true)]
[String]$ServerName,
[parameter(Mandatory=$true)]
[String]$serverAdmin,
[parameter(Mandatory=$true)]
[String]$ServerPassword
)
$VERSION = "0.2.0"
$currentTime = (Get-Date).ToUniversalTime()
Write-Output "Backup SQL Azure db automation script - version $VERSION"
Write-Output "Runbook started..."
# Main runbook content
try
{
$securePassword = ConvertTo-SecureString -String $serverPassword -AsPlainText -Force
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $serverAdmin, $securePassword
# Generate a unique filename for the BACPAC
$bacpacFilename = $ServerName '-' $DbName '-' (Get-Date).ToString("yyyyMMddTHHmmssZ") ".bacpac"
# Storage account info for the BACPAC
$BaseStorageUri = "https://$storageAccount.blob.core.windows.net/$blobContainer/"
$BacpacUri = $BaseStorageUri $bacpacFilename
Write-Output "Logging in to Azure..."
# Get the connection
$con = Get-AutomationConnection -Name $AutomationConnection
$null = Add-AzureRmAccount -ServicePrincipal -TenantId $con.TenantId -ApplicationId $con.ApplicationId -CertificateThumbprint $con.CertificateThumbprint
$null = Select-AzureRmSubscription -SubscriptionName $SubscriptionName
Write-Output "Will backup db $DbName to $blobContainer blob storage in storage account $storageAccount with name $bacpacFilename ..."
$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
-DatabaseName $DbName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
-AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password
# Check status of the export
$status = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
Write-Output "Export status is:"
$status
}
catch
{
if (!$con)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
finally
{
"Runbook finished (Duration: $(("{0:hh:mm:ss}" -f ((Get-Date).ToUniversalTime() - $currentTime))))"
}
А вот руководство по созданию RunBook в PowerShell. С помощью этого вы можете установить расписание и легко расширить его для любого количества баз данных, сколько вам нужно.
Еще один вариант и лучшая ИМО-встроенные функции для резервного копирования в Azure SQL. Пожалуйста, взгляните сюда
Комментарии:
1. Спасибо за общий доступ, но я получил следующую ошибку при запуске runbook New-AzureRmSqlDatabaseExport : термин «New-AzureRmSqlDatabaseExport» не распознается как имя командлета, функции, файла сценария или работающей программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что
2. Это может быть проблема с модулями rm. Вероятно, их следует заменить модулями az.