Экземпляр SQL Server, работающий в Azure

#sql-server #azure #powershell #azure-devops #database-backups

Вопрос:

Я пытаюсь создать политику резервного копирования для баз данных в Azure в качестве службы PAAS SQL server. Мне пришло в голову использовать PowerShell для резервного копирования баз данных внутри SQL Server, а затем загрузить его в учетную запись хранилища Azure.PowerShell будет работать на Azure Devops внутри агентов, размещенных Microsoft.

Но я в замешательстве по большинству вопросов, таких как:

  1. Как получить экземпляр этого SQL-сервера?
  2. Как создать новые учетные данные 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.