SQL Server 2014 虚拟机(资源管理器)的自动备份

适用于:Azure VM 上的 SQL Server

自动备份会在运行 SQL Server 2014 Standard 或 Enterprise 的 Azure VM 上自动为所有现有数据库和新数据库配置托管备份到 Azure 。 这样,便可以配置使用持久 Azure Blob 存储的定期数据库备份。 自动备份依赖于 SQL Server 基础架构即服务 (IaaS) 代理扩展

先决条件

要对 Azure VM 上的 SQL Server 使用自动备份,需要:

  • 使用 SQL IaaS 代理扩展注册的 Azure VM 上的 SQL Server。
  • Windows Server 2012 或更高版本。
  • SQL Server 2014(标准版或企业版)。 对于更高版本的 SQL Server,请参阅 SQL Server 2016 及更高版本的自动备份
  • 数据库配置
    • 目标用户数据库必须使用完整恢复模式。 系统数据库不需要使用完整恢复模式。 但是,如果需要为 modelmsdb 创建日志备份,则必须使用完整恢复模型。 有关对备份使用完整恢复模型产生的影响的详细信息,请参阅使用完整恢复模型的备份
    • 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 自动备份”设置。

Azure 门户中的 SQL 自动备份配置的屏幕截图。

配置现有 VM

对于现有的 SQL Server VM,可以启用和禁用自动备份、更改保留期、指定存储帐户以及从 Azure 门户启用加密。

导航到 SQL Server 2014 虚拟机的 SQL 虚拟机资源,然后选择“备份”。

现有虚拟机的 SQL 自动备份的屏幕截图。

完成后,选择“备份”页底部的“应用”按钮,以保存更改 。

首次启用自动备份时,Azure 会在后台配置 SQL Server IaaS 代理。 在此期间,Azure 门户可能不会显示自动备份已配置。 请等待几分钟,以便安装和配置代理。 之后,Azure 门户将反映出新设置。

注意

也可以使用模板来配置自动备份。 有关详细信息,请参阅 Azure quickstart template for Automated Backup(用于自动备份的 Azure 快速入门模板)。

使用 PowerShell 配置

可使用 PowerShell 配置自动备份。 开始之前,必须:

注意

本文使用 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 

使用加密证书进行备份

如果决定加密备份,则将生成加密证书并将其保存在与备份相同的存储帐户中。 在此应用场景中,还需要输入密码,该密码将用于保护用于加密和解密备份的加密证书。 这样,你就无需担心此功能的配置之外的备份问题,还可确保可以信任备份是安全的。

启用备份加密后,强烈建议确定是否已成功创建并上传加密证书,以确保数据库的可还原性。 为此,可以立即创建一个数据库,并检查加密证书和数据是否已正确备份到新创建的容器。 这表明所有配置都是正确的,没有发生异常。

如果证书由于某种原因未能上传,则可以使用证书管理器导出证书并保存它。 但是,你不希望将其保存在同一虚拟机上,因为这不会确保你在虚拟机关闭时有权访问证书。 要了解在更改或创建自动备份配置后证书是否已正确备份,可以检查虚拟机中的事件日志,如果失败,则会看到以下错误消息:

虚拟机的事件日志中显示的错误消息的屏幕截图。

如果证书备份正确,则将在事件日志中看到此消息:

事件日志中成功备份加密证书的屏幕截图。

作为通用实践,建议不时检查备份的运行状况。 为了能够还原备份,应执行下列操作:

  1. 确认加密证书已备份,并且你记住了密码。 否则将无法解密和还原备份。 如果由于某种原因,证书没有正确备份,则可以通过执行以下 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>)
    
  2. 确认备份文件已上传并且至少包含 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 概述