你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
关于 Azure VM 中的 SQL Server 备份
Azure 备份提供了一个基于流的专业解决方案,用于备份在 Azure VM 中运行的 SQL Server。 此解决方案考虑到了 Azure 备份的零基础结构备份、长期保留和集中管理的优点。 它还特别为 SQL Server 提供了以下优势:
- 工作负荷感知备份,支持所有备份类型(完整备份、差异备份和日志备份)
- 15 分钟恢复点目标 (RPO),频繁备份日志
- 最多一秒的时点恢复
- 单数据库级别的备份和还原
若要查看我们目前支持的备份和还原方案,请参阅支持矩阵。
备份过程
此解决方案利用 SQL 本机 API 来备份 SQL 数据库。
指定要保护的 SQL Server VM 并查询其中的数据库后,Azure 备份服务将在此 VM 上以
AzureBackupWindowsWorkload
扩展名安装工作负荷备份扩展。此扩展包含协调器和 SQL 插件。 协调器负责触发多种操作(如配置备份、备份和还原)的工作流,插件负责实际数据流。
为了能够发现此 VM 上的数据库,Azure 备份将创建帐户
NT SERVICE\AzureWLBackupPluginSvc
。 此帐户用于备份和还原,需要拥有 SQL sysadmin 权限。NT SERVICE\AzureWLBackupPluginSvc
帐户是虚拟服务帐户,因此不需要任何密码管理。 Azure 备份使用NT AUTHORITY\SYSTEM
帐户进行数据库发现/查询,因此该帐户需要是 SQL 上的公共登录名。 如果 SQL Server VM 不是从 Azure 市场创建的,你可能会收到错误 UserErrorSQLNoSysadminMembership。 如果发生此错误,请遵照这些说明予以解决。在所选数据库上触发配置保护后,备份服务将使用备份计划和其他策略详细信息设置协调器,扩展将这些详细信息本地缓存在 VM 上。
在计划的时间,协调器与插件通信,并开始使用 VDI 从 SQL 服务器流式处理备份数据。
插件将数据直接发送到恢复服务保管库,因此不需要暂存位置。 Azure 备份服务在存储帐户中加密和存储数据。
数据传输完成后,协调器通过备份服务确认提交。
开始之前
在开始之前,请验证以下要求:
- 确保有一个 SQL Server 实例在 Azure 中运行。 可以在市场中快速创建 SQL Server 实例。
- 查看功能注意事项和方案支持。
- 查看有关此方案的常见问题解答。
设置 VM 权限
当你在 SQL Server 上运行发现时,Azure 备份会执行以下操作:
- 添加 AzureBackupWindowsWorkload 扩展。
- 创建 NT SERVICE\AzureWLBackupPluginSvc 帐户,以发现虚拟机上的数据库。 此帐户用于备份和还原,需要拥有 SQL sysadmin 权限。
- Azure 备份使用 NT AUTHORITY\SYSTEM 帐户来发现 VM 上运行的数据库。 此帐户必须是 SQL 上的公共登录名。
如果你未在 Azure 市场中创建 SQL Server VM,或者在 SQL 2008 或 2008 R2 上操作,可能会收到 UserErrorSQLNoSysadminMembership 错误。
要了解在使用 Windows 2008 R2 上运行的 SQL 2008 和 2008 R2 时如何授权,请参阅此处 。
对于所有其他版本,可使用以下步骤解决权限问题:
使用拥有 SQL Server sysadmin 权限的帐户登录到 SQL Server Management Studio (SSMS)。 除非需要特殊权限,否则 Windows 身份验证应该正常运行。
在 SQL 服务器上,打开“安全/登录名”文件夹。
右键单击“登录名”文件夹并选择“新建登录名”。 在“登录名 - 新建”中,选择“搜索”。
在虚拟机注册和 SQL 发现阶段已创建 Windows 虚拟服务帐户 NT SSERVICE\AzureWLBackupPluginSvc。 输入“输入要选择的对象名称”中显示的帐户名。 选择“检查名称”以解析名称。 选择“确定”。
在“服务器角色”中,确保“sysadmin”角色已选中。 选择“确定” 。 现在,所需的权限应会存在。
现在,将数据库与恢复服务保管库相关联。 在 Azure 门户中的“受保护的服务器”列表中,右键单击处于错误状态的服务器 >“重新发现数据库”。
在“通知”区域查看进度。 找到选定的数据库后,会显示一条成功消息。
注意
如果 SQL Server 安装了多个 SQL Server 实例,则必须将 NT Service\AzureWLBackupPluginSvc 帐户的 sysadmin 权限添加到所有 SQL 实例。
为 SQL sysadmin 授予 SQL 2008 和 SQL 2008 R2 的权限
将 NT AUTHORITY\SYSTEM 和 NT Service\AzureWLBackupPluginSvc 登录名添加到 SQL Server 实例:
在对象资源管理器中转到该 SQL Server 实例。
导航到“安全性”->“登录名”
右键单击“登录名”,并选择“新建登录名…”
转到“常规”选项卡并输入 NT AUTHORITY\SYSTEM 作为登录名。
转到“服务器角色”,选择“public”和“sysadmin”角色。
转到“状态”。 授予连接到数据库引擎的权限,并将“登录名”设置为“已启用”。
选择“确定”。
重复相同的步骤序列(上述步骤 1-7),将 NT Service\AzureWLBackupPluginSvc 登录名添加到 SQL Server 实例。 如果该登录名已存在,请确保它具有 sysadmin 服务器角色并处于这种状态:已授予连接到数据库引擎的权限,且“登录名”设置为“已启用”。
授予权限后,在门户中“重新发现 DB”:“保管库”->“管理”->“备份基础结构”->“Azure VM 中的工作负荷”:
或者,可以在管理员模式下运行以下 PowerShell 命令,来自动授予权限。 实例名称默认设置为 MSSQLSERVER。 根据需要更改脚本中的实例名称参数。
param(
[Parameter(Mandatory=$false)]
[string] $InstanceName = "MSSQLSERVER"
)
if ($InstanceName -eq "MSSQLSERVER")
{
$fullInstance = $env:COMPUTERNAME # In case it is the default SQL Server Instance
}
else
{
$fullInstance = $env:COMPUTERNAME + "\" + $InstanceName # In case of named instance
}
try
{
sqlcmd.exe -S $fullInstance -Q "sp_addsrvrolemember 'NT Service\AzureWLBackupPluginSvc', 'sysadmin'" # Adds login with sysadmin permission if already not available
}
catch
{
Write-Host "An error occurred:"
Write-Host $_.Exception|format-list -force
}
try
{
sqlcmd.exe -S $fullInstance -Q "sp_addsrvrolemember 'NT AUTHORITY\SYSTEM', 'sysadmin'" # Adds login with sysadmin permission if already not available
}
catch
{
Write-Host "An error occurred:"
Write-Host $_.Exception|format-list -force
}
配置同时备份
现在可以配置备份,以同时将 SQL Server 恢复点和日志保存在本地存储和恢复服务保管库中。
若要配置同时同步,请按照以下步骤进行操作:
转到该
C:\Program Files\Azure Workload Backup\bin\plugins
位置,然后创建文件 PluginConfigSettings.json(如果不存在)。将逗号分隔的键值实体(包含键
EnableLocalDiskBackupForBackupTypes
和LocalDiskBackupFolderPath
)添加到该 JSON 文件。在
EnableLocalDiskBackupForBackupTypes
下,列出要在本地存储的备份类型。例如,如果要存储完整备份和日志备份,请提及
["Full", "Log"]
。 若要仅存储日志备份,请提及["Log"]
。在
LocalDiskBackupFolderPath
下,提及本地文件夹的路径。 在 JSON 文件中提及路径时,确保使用双正斜杠。例如,如果本地备份的首选路径为
E:\LocalBackup
,请将 JSON 中的路径提及为E:\\LocalBackup
。最终的 JSON 应显示为:
{ "EnableLocalDiskBackupForBackupTypes": ["Log"], "LocalDiskBackupFolderPath": "E:\\LocalBackup", }
如果 JSON 文件中还有其他预填充条目,请在 JSON 文件底部的右大括号前添加上述两个条目。
若要使更改立即生效(而不是常规的一小时),请转到“TaskManager”>“服务”,右键单击“AzureWLbackupPluginSvc”,然后选择“停止”。
注意
此操作将取消所有正在进行的备份作业。
存储的备份文件的命名约定及其文件夹结构为
{LocalDiskBackupFolderPath}\{SQLInstanceName}\{DatabaseName}
。例如,如果 SQL 实例
MSSQLSERVER
下有一个数据库Contoso
,则文件将位于E:\LocalBackup\MSSQLSERVER\Contoso
中。该文件的名称为
VDI device set guid
,它用于备份操作。检查
LocalDiskBackupFolderPath
下的目标位置是否具有NT Service\AzureWLBackupPluginSvc
的读取和写入权限。注意
对于本地 VM 磁盘上的文件夹,右键单击该文件夹,然后在“
NT Service\AzureWLBackupPluginSvc
安全性”选项卡上为 配置所需的权限。如果使用网络或 SMB 共享,请通过从有权访问共享的用户控制台运行以下 PowerShell cmdlet 来配置权限:
$cred = Get-Credential New-SmbGlobalMapping -RemotePath <FileSharePath> -Credential $cred -LocalPath <LocalDrive>: -FullAccess @("<Comma Separated list of accounts>") -Persistent $true
示例:
$cred = Get-Credential New-SmbGlobalMapping -RemotePath \\i00601p1imsa01.file.core.windows.net\rsvshare -Credential $cred -LocalPath Y: -FullAccess @("NT AUTHORITY\SYSTEM","NT Service\AzureWLBackupPluginSvc") -Persistent $true