前段时间有个客户有如下需求,将Azure SQL Database数据库容灾到本地(备份频率1小时/次)。
那么对于这样的需求,我们可以使用Azure Automation来实现自动化备份到本地。
大致备份流程如下:
1、先决条件:
l Azure 账号
l Automation 账号
l Storage 账号
l 最新版Azure Powershell Module
2、创建Azrue Automation
依次选择App Services——>Automation——>Runbook——>Quick Create
3、使用 Azure 服务管理和 Resource Manager 对 Runbook 进行身份验证
2.1 选择“Automation”。
2.2 在“自动化仪表板”页上,选择“ASSETS”。
2.3 在“ASSETS”页上,选择位于页面底部的“ADD SETTING”。
2.4 在“ADD SETTING”页上,选择“ADD CREDENTIAL”。
2.5在“Define Credential”页的“CREDENTIAL TYPE”下拉列表中选择“Windows PowerShell Credential”,并提供凭据名称。
2.6在随后出现的“Define Credential”页上,在“USER NAME”字段中键入前面创建的 AD 用户帐户的用户名,并在“PASSWORD”和“CONFIRM PASSWORD”字段中键入密码。单击“确定”保存更改。
4、替换Azure Powershell Module
在这里有一点非常重要,我们可以看到Azure Powershell Module是2016/12/12这个版本,
而遗憾的是这个版本的Azure Powershell Module没有提供导出SQL Database的命令,所以我们需要手动更新Azure Powershell Module
更新后Azure Powershell Module
5、备份SQL Database脚本
workflow BackUpSQLDB { $Credential = Get-AutomationPSCredential -Name 'BackupDB' Add-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $Credential $ResourceGroupName='RESOURCE-GROUP-NAME' $ServerName='SERVER-NAME' $DatabaseName='DATABASE-NAME' $StorageName='STORAGE-NAME' $StorageKeytype='StorageAccessKey' $StorageKey='base-64 String' $BlobName=$DatabaseName+(Get-Date).Tostring('yyyy-MM-dd-HH-mm-ss') + '.bacpac' $BacpacUri='https://STORAGE-NAME.blob.core.chinacloudapi.cn/dbbackup/'+$BlobName $SqlUserName='SQL LOGIN USER NAME' $SqlPassword = ConvertTo-SecureString -String 'SQL LOGIN PASSWORD' -AsPlainText -Force #Get-AzureRmSubscription Set-AzureRmContext -SubscriptionId 'SUBSCRIPT ID' $exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -StorageKeytype StorageAccessKey -StorageKey $StorageKey -StorageUri $BacpacUri -AdministratorLogin $SqlUserName -AdministratorLoginPassword $SqlPassword Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink }
6、将备份到Azure Storage下载到本地
workflow DownloadToLocal { $Credential = Get-AutomationPSCredential -Name 'BackupDB' Add-AzureAccount -Environment AzureChinaCloud -Credential $Credential Select-AzureSubscription -SubscriptionId '{Subscription ID}' $StorageName='STORAGE-NAME' $StorageKeytype='StorageAccessKey' $StorageKey='base-64 String' $StorageContext = New-AzureStorageContext -StorageAccountName $StorageName -StorageAccountKey $StorageKey -Environment AzureChinaCloud Get-AzureStorageBlobContent -Context $StorageContext -Container "dbbackup" -Blob $BlobName -Destination "C: est" }
备份到Storage
备份到本地