SQL Server 2014 虚拟机(资源管理器)的自动备份
自动备份会在运行 SQL Server 2014 Standard 或 Enterprise 的 Azure VM 上自动为所有现有数据库和新数据库配置托管备份到 Azure 。 这样,便可以配置使用持久 Azure Blob 存储的定期数据库备份。 自动备份依赖于 SQL Server 基础架构即服务 (IaaS) 代理扩展。
注意
Azure 提供两种不同的部署模型用于创建和处理资源:Azure 资源管理器模型和经典模型。 本文介绍了资源管理器部署模型的使用。 对于新部署,建议使用资源管理器部署模型而非经典部署模型。
先决条件
若要使用自动备份,请考虑以下先决条件:
操作系统:
- Windows Server 2012 及更高版本
SQL Server 版本:
- SQL Server 2014 Standard
- SQL Server 2014 Enterprise
注意
有关 SQL 2016 及更高版本,请参阅 SQL Server 2016 的自动备份。
数据库配置:
- 目标用户数据库必须使用完整恢复模式。 系统数据库不需要使用完整恢复模型。 但是,如果需要为
model
或msdb
创建日志备份,则必须使用完整恢复模型。 有关对备份使用完整恢复模型产生的影响的详细信息,请参阅使用完整恢复模型的备份。 - SQL Server VM 已注册到 SQL IaaS 代理扩展,并且已启用“自动备份”功能。 由于自动备份依赖于扩展,因此只有默认实例或单个命名实例的目标数据库支持自动备份。 如果没有默认实例,并且存在多个命名实例,SQL IaaS 代理扩展将失败,自动备份将无法工作。
设置
下表描述了可为自动备份配置的选项。 实际配置步骤根据你使用的是 Azure 门户还是 Azure Windows PowerShell 命令而有所不同。 请注意,自动备份默认使用备份压缩,且不能禁用它。
设置 | 范围(默认值) | 说明 |
---|---|---|
自动备份 | 启用/禁用(已禁用) | 为运行 SQL Server 2014 Standard 或 Enterprise 的 Azure VM 启用或禁用自动备份。 |
保持期 | 1-90 天(90 天) | 保留备份的天数。 |
存储帐户 | Azure 存储帐户 | 用于在 Blob 存储中存储自动备份文件的 Azure 存储帐户。 在此位置创建容器,用于存储所有备份文件。 备份文件命名约定包括日期、时间和计算机名称。 |
加密 | 启用/禁用(已禁用) | 启用或禁用备份加密。 启用备份加密时,用于还原备份的证书使用相同的命名约定存放在同一 automaticbackup 容器中的指定存储帐户内。 如果密码发生更改,则使用该密码生成新证书,但旧证书在备份之前仍会还原。 |
密码 | 密码文本 | 加密密钥的密码。 仅当启用了加密时才需要此设置。 若要还原加密的备份,必须具有创建该备份时使用的正确密码和相关证书。 |
配置新 VM
在资源管理器部署模型中创建新的 SQL Server 2014 虚拟机时,可以使用 Azure 门户配置自动备份。
在“SQL Server 设置”选项卡上,向下滚动到“自动备份”,然后选择“启用” 。 下面的 Azure 门户屏幕截图显示了“SQL 自动备份”设置。
配置现有 VM
对于现有的 SQL Server VM,可以启用和禁用自动备份、更改保留期、指定存储帐户以及从 Azure 门户启用加密。
导航到 SQL Server 2014 虚拟机的 SQL 虚拟机资源,然后选择“备份”。
完成后,选择“备份”页底部的“应用”按钮,以保存更改 。
首次启用自动备份时,Azure 会在后台配置 SQL Server IaaS 代理。 在此期间,Azure 门户可能不会显示自动备份已配置。 请等待几分钟,以便安装和配置代理。 之后,Azure 门户将反映出新设置。
注意
也可以使用模板来配置自动备份。 有关详细信息,请参阅 Azure quickstart template for Automated Backup(用于自动备份的 Azure 快速入门模板)。
使用 PowerShell 配置
可使用 PowerShell 配置自动备份。 开始之前,必须:
- 下载并安装最新的 Azure PowerShell。
- 打开 Windows PowerShell 并使用 Connect-AzAccount -Environment AzureChinaCloud 命令将其与帐户关联。
注意
本文使用 Azure Az PowerShell 模块,这是与 Azure 交互时推荐使用的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
验证当前设置
如果在预配期间启用了自动备份,可以使用 PowerShell 检查当前配置。 运行 Get-AzVMSqlServerExtension 命令并检查 AutoBackupSettings 属性:
$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"
(Get-AzVMSqlServerExtension -VMName $vmname -ResourceGroupName $resourcegroupname).AutoBackupSettings
应会看到类似于下面的输出:
Enable : False
EnableEncryption : False
RetentionPeriod : -1
StorageUrl : NOTSET
StorageAccessKey :
Password :
BackupSystemDbs : False
BackupScheduleType :
FullBackupFrequency :
FullBackupStartTime :
FullBackupWindowHours :
LogBackupFrequency :
如果输出显示 Enable 设置为 False,则必须启用自动备份。 幸运的是,可通过相同的方式启用和配置自动备份。 有关信息,请参阅下一部分。
注意
如果在进行更改后立即检查设置,看到的可能是旧配置值。 请等待几分钟再检查设置,确保更改已应用。
配置自动备份
随时可以使用 PowerShell 来启用自动备份以及修改其配置和行为。
首先,为备份文件选择或创建存储帐户。 以下脚本选择一个存储帐户,或者创建一个存储帐户(如果不存在)。
$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"
$storage_accountname = "yourstorageaccount"
$storage_url = "https://yourstorageaccount.blob.core.chinacloudapi.cn/"
$storage = Get-AzStorageAccount -ResourceGroupName $resourcegroupname `
-Name $storage_accountname -ErrorAction SilentlyContinue
If (-Not $storage)
{ $storage = New-AzStorageAccount -ResourceGroupName $resourcegroupname `
-Name $storage_accountname -SkuName Standard_GRS -Location $region }
注意
自动备份不支持在高级存储中存储备份,但可以从使用高级存储的 VM 磁盘创建备份。
如果要在存储帐户中使用自定义容器进行备份,请使用以下脚本检查容器或创建容器(如果不存在)。
$storage_container = "backupcontainer"
New-AzStorageContainer -Name $storage_container -Context $storage.Context
if (!(Get-AzStorageAccount -StorageAccountName $storage_accountname -ResourceGroupName $resourcegroupname | Get-AzStorageContainer | Where-Object { $_.Name -eq $storage_container })){ `
New-AzStorageContainer -Name $storage_container -Context $storage.Context `
} `
else `
{ `
Write-Warning "Container $storage_container already exists." `
}
接下来,使用以下脚本获取存储帐户的访问密钥:
$accesskey = (Get-AzStorageAccountKey -ResourceGroupName $resourcegroupname -Name $storage_accountname)[0].value
然后,使用 Update-AzSqlVM 命令启用并配置自动备份设置,以便在 Azure 存储帐户中存储备份。 在本示例中,备份设置为保留 10 天。
Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod 10 `
-AutoBackupSettingStorageContainerName $storage_container
可能需要花费几分钟来安装和配置 SQL Server IaaS 代理。
注意
还有仅适用于 SQL Server 2016 和自动备份的其他Update-AzSqlVM* 设置。 SQL Server 2014 不支持以下设置:-AutoBackupSettingBackupSystemDb、-AutoBackupSettingBackupScheduleType、-AutoBackupSettingFullBackupFrequency、-AutoBackupSettingFullBackupStartTime、-AutoBackupSettingFullBackupWindowHour和 -AutoBackupSettingLogBackupFrequency。 如果尝试在 SQL Server 2014 虚拟机上配置这些设置,则不存在错误,但不会应用这些设置。 若要在 SQL Server 2016 虚拟机上使用这些设置,请参阅 SQL Server 2016 Azure 虚拟机的自动备份。
要启用加密,请修改上述脚本,使其将-AutoBackupSettingEnableEncryption参数连同 -AutoBackupSettingPassword参数的密码(安全字符串)一起传递。 以下脚本启用上一示例中的自动备份设置,并添加加密。
$password = "r@ndom Va1ue"
$encryptionpassword = $password | ConvertTo-SecureString -AsPlainText -Force
Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod 10 `
-AutoBackupSettingEnableEncryption `
-AutoBackupSettingPassword $encryptionpassword `
-AutoBackupSettingStorageContainerName $storage_container
若要确认是否应用了这些设置,请 检查自动备份配置。
禁用自动备份
要禁用自动备份,请在 Update-AzSqlVM 命令中运行 -AutoBackupSettingEnable 参数设置为 $false 的脚本。 通过将值设置为 $false 来禁用该功能。 与安装一样,可能需要花费几分钟时间来禁用自动备份。
Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable:$false
示例脚本
以下脚本提供一组可自定义的变量,用来为 VM 启用和配置自动备份。 根据具体的情况,可能需要根据要求自定义该脚本。 例如,如果想要禁用系统数据库备份或启用加密,则必须更改该脚本。
$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"
$region = "Azure region name such as China East 2"
$storage_accountname = "yourstorageaccount"
$storage_url = "https://yourstorageaccount.blob.core.chinacloudapi.cn/"
$retentionperiod = 10
# ResourceGroupName is the resource group which is hosting the VM where you are deploying the SQL Server IaaS Extension
Set-AzVMSqlServerExtension -VMName $vmname `
-ResourceGroupName $resourcegroupname -Name "SQLIaasExtension" `
-Version "2.0" -Location $region
# Creates/use a storage account to store the backups
$storage = Get-AzStorageAccount -ResourceGroupName $resourcegroupname `
-Name $storage_accountname -ErrorAction SilentlyContinue
If (-Not $storage)
{ $storage = New-AzStorageAccount -ResourceGroupName $resourcegroupname `
-Name $storage_accountname -SkuName Standard_GRS -Location $region }
# Creates/uses a custom storage account container
$storage_container = "yourbackupcontainer"
if (!(Get-AzStorageAccount -StorageAccountName $storage_accountname -ResourceGroupName $resourcegroupname | Get-AzStorageContainer | Where-Object { $_.Name -eq $storage_container })){ `
New-AzStorageContainer -Name $storage_container -Context $storage.Context `
} `
else `
{ `
Write-Warning "Container $storage_container already exists." `
}
# Get storage account access key
$accesskey = (Get-AzStorageAccountKey -ResourceGroupName $resourcegroupname -Name $storage_accountname)[0].value
# Configure Automated Backup settings
Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod $retentionperiod `
-AutoBackupSettingStorageContainerName $storage_container
使用加密证书进行备份
如果决定加密备份,则将生成加密证书并将其保存在与备份相同的存储帐户中。 在此应用场景中,还需要输入密码,该密码将用于保护用于加密和解密备份的加密证书。 这样,你就无需担心此功能的配置之外的备份问题,还可确保可以信任备份是安全的。
启用备份加密后,强烈建议确定是否已成功创建并上传加密证书,以确保数据库的可还原性。 为此,可以立即创建一个数据库,并检查加密证书和数据是否已正确备份到新创建的容器。 这将表明所有配置都是正确的,没有发生异常。
如果证书由于某种原因未能上传,则可以使用证书管理器导出证书并保存它。 但是,你不希望将其保存在同一虚拟机上,因为这不会确保你在虚拟机关闭时有权访问证书。 若要了解在更改或创建自动备份配置后证书是否已正确备份,可以检查虚拟机中的事件日志,如果失败,则会看到以下错误消息:
如果证书备份正确,则将在事件日志中看到此消息:
作为通用实践,建议不时检查备份的运行状况。 为了能够还原备份,应执行下列操作:
确认加密证书已备份,并且你记住了密码。 如果不这样做,则将无法解密和还原备份。 如果由于某种原因,证书没有正确备份,则可以通过执行以下 T-SQL 查询来手动完成此操作:
BACKUP MASTER KEY TO FILE = <file_path> ENCRYPTION BY PASSWORD = <password> BACKUP CERTIFICATE [AutoBackup_Certificate] TO FILE = <file_path> WITH PRIVATE KEY (FILE = <file_path>, ENCRYPTION BY PASSWORD = <password>)
确认备份文件已上传并且至少包含 1 个完整备份。 由于发生错误,在删除虚拟机之前或者在虚拟机损坏的情况下,应确保始终至少有一个完整备份,这样你就知道自己仍然可以访问数据。 在删除 VM 的数据磁盘之前,应确保存储中的备份安全且可恢复。
监视
可通过一种方式监视 SQL Server 2014 上的自动备份。 由于自动备份使用 SQL Server 托管备份功能,同样的监视方法对两者均适用。
可通过调用 msdb.smart_admin.sp_get_backup_diagnostics 轮询状态。 或查询 msdb.smart_admin.fn_get_health_status 表值函数。
注意
适用于 SQL Server 2014 中托管备份的架构是 msdb.smart_admin。 在 SQL Server 2016 中,架构需更改为 msdb.managed_backup,且参考主题使用此较新架构。 但对于 SQL Server 2014,必须为所有托管备份对象继续使用 smart_admin 架构。
后续步骤
自动备份会在 Azure VM 上配置托管备份。 因此,请务必查看有关 SQL Server 2014 托管备份的文档。
可以在以下文章中找到针对 Azure VM 上 SQL Server 的其他备份和还原指导:Azure 虚拟机上的 SQL Server 的备份和还原。
有关其他可用自动化任务的信息,请参阅 SQL Server IaaS 代理扩展。
有关在 Azure VM 上运行 SQL Server 的详细信息,请参阅 Azure 虚拟机上的 SQL Server 概述。