Azure 備份提供了一個(gè)基于流的專業(yè)解決方案,用于備份在 Azure VM 中運(yùn)行的 SQL Server。 此解決方案考慮到了 Azure 備份的零基礎(chǔ)結(jié)構(gòu)備份、長(zhǎng)期保留和集中管理的優(yōu)點(diǎn)。 它還特別為 SQL Server 提供了以下優(yōu)勢(shì):
工作負(fù)荷感知備份,支持所有備份類型(完整備份、差異備份和日志備份)
15 分鐘恢復(fù)點(diǎn)目標(biāo) (RPO),頻繁備份日志
最多一秒的時(shí)點(diǎn)恢復(fù)
單數(shù)據(jù)庫(kù)級(jí)別的備份和還原
備注
Azure VM 中 SQL 數(shù)據(jù)庫(kù)的基于快照的備份目前提供預(yù)覽版。 這個(gè)獨(dú)特的產(chǎn)品/服務(wù)將快照的優(yōu)勢(shì)(改進(jìn) RTO 并降低對(duì)服務(wù)器的影響)與頻繁日志備份的優(yōu)勢(shì)(實(shí)現(xiàn)低 RTO)相結(jié)合。 對(duì)于任何查詢/訪問權(quán)限,請(qǐng)?jiān)谥袑懭?nbsp;AskAzureBackupTeam@microsoft.com 。
若要查看我們目前支持的備份和還原方案,請(qǐng)參閱支持矩陣。
此解決方案利用 SQL 本機(jī) API 來備份 SQL 數(shù)據(jù)庫(kù)。
指定要保護(hù)的 SQL Server VM 并查詢其中的數(shù)據(jù)庫(kù)后,Azure 備份服務(wù)將在此 VM 上以 AzureBackupWindowsWorkload
擴(kuò)展名安裝工作負(fù)荷備份擴(kuò)展。
此擴(kuò)展包含協(xié)調(diào)器和 SQL 插件。 協(xié)調(diào)器負(fù)責(zé)觸發(fā)多種操作(如配置備份、備份和還原)的工作流,插件負(fù)責(zé)實(shí)際數(shù)據(jù)流。
為了能夠發(fā)現(xiàn)此 VM 上的數(shù)據(jù)庫(kù),Azure 備份將創(chuàng)建帳戶 NT SERVICE\AzureWLBackupPluginSvc
。 此帳戶用于備份和還原,需要擁有 SQL sysadmin 權(quán)限。 該 NT SERVICE\AzureWLBackupPluginSvc
帳戶是一個(gè) NT SERVICE\AzureWLBackupPluginSvc
,因此不需要任何密碼管理。 Azure 備份使用 NT AUTHORITY\SYSTEM
帳戶進(jìn)行數(shù)據(jù)庫(kù)發(fā)現(xiàn)/查詢,因此該帳戶需要是 SQL 上的公共登錄名。 如果 SQL Server VM 不是從 Azure 市場(chǎng)創(chuàng)建的,你可能會(huì)收到錯(cuò)誤 UserErrorSQLNoSysadminMembership。 如果發(fā)生此錯(cuò)誤,請(qǐng)遵照這些說明予以解決。
在所選數(shù)據(jù)庫(kù)上觸發(fā)配置保護(hù)后,備份服務(wù)將使用備份計(jì)劃和其他策略詳細(xì)信息設(shè)置協(xié)調(diào)器,擴(kuò)展將這些詳細(xì)信息本地緩存在 VM 上。
在計(jì)劃的時(shí)間,協(xié)調(diào)器與插件通信,并開始使用 VDI 從 SQL 服務(wù)器流式處理備份數(shù)據(jù)。
插件將數(shù)據(jù)直接發(fā)送到恢復(fù)服務(wù)保管庫(kù),因此不需要暫存位置。 Azure 備份服務(wù)在存儲(chǔ)帳戶中加密和存儲(chǔ)數(shù)據(jù)。
數(shù)據(jù)傳輸完成后,協(xié)調(diào)器通過備份服務(wù)確認(rèn)提交。
在開始之前,請(qǐng)驗(yàn)證以下要求:
確保有一個(gè) SQL Server 實(shí)例在 Azure 中運(yùn)行。 可以在市場(chǎng)中快速創(chuàng)建 SQL Server 實(shí)例。
查看功能注意事項(xiàng)和方案支持。
查看有關(guān)此方案的常見問題解答。
當(dāng)你在 SQL Server 上運(yùn)行發(fā)現(xiàn)時(shí),Azure 備份會(huì)執(zhí)行以下操作:
添加 AzureBackupWindowsWorkload 擴(kuò)展。
創(chuàng)建 NT SERVICE\AzureWLBackupPluginSvc 帳戶,以發(fā)現(xiàn)虛擬機(jī)上的數(shù)據(jù)庫(kù)。 此帳戶用于備份和還原,需要擁有 SQL sysadmin 權(quán)限。
Azure 備份使用 NT AUTHORITY\SYSTEM 帳戶來發(fā)現(xiàn) VM 上運(yùn)行的數(shù)據(jù)庫(kù)。 此帳戶必須是 SQL 上的公共登錄名。
如果你未在 Azure 市場(chǎng)中創(chuàng)建 SQL Server VM,或者在 SQL 2008 或 2008 R2 上操作,可能會(huì)收到 UserErrorSQLNoSysadminMembership 錯(cuò)誤。
要了解在使用 Windows 2008 R2 上運(yùn)行的 SQL 2008 和 2008 R2 時(shí)如何授權(quán),請(qǐng)參閱此處 。
對(duì)于所有其他版本,可使用以下步驟解決權(quán)限問題:
使用擁有 SQL Server sysadmin 權(quán)限的帳戶登錄到 SQL Server Management Studio (SSMS)。 除非需要特殊權(quán)限,否則 Windows 身份驗(yàn)證應(yīng)該正常運(yùn)行。
在 SQL 服務(wù)器上,打開“安全/登錄名”文件夾。
右鍵單擊“登錄名”文件夾并選擇“新建登錄名”。 在“登錄名 - 新建”中,選擇“搜索”。
在虛擬機(jī)注冊(cè)和 SQL 發(fā)現(xiàn)階段已創(chuàng)建 Windows 虛擬服務(wù)帳戶 NT SSERVICE\AzureWLBackupPluginSvc。 輸入“輸入要選擇的對(duì)象名稱”中顯示的帳戶名。 選擇“檢查名稱”以解析名稱。 選擇“確定” 。
在“服務(wù)器角色”中,確保“sysadmin”角色已選中。 選擇“確定” 。 現(xiàn)在,所需的權(quán)限應(yīng)會(huì)存在。
現(xiàn)在,將數(shù)據(jù)庫(kù)與恢復(fù)服務(wù)保管庫(kù)相關(guān)聯(lián)。 在 Azure 門戶的 "受保護(hù)的服務(wù)器" 列表中,右鍵單擊處于錯(cuò)誤狀態(tài)的服務(wù)器重新 發(fā)現(xiàn)數(shù)據(jù)庫(kù)。
在“通知”區(qū)域查看進(jìn)度。 找到選定的數(shù)據(jù)庫(kù)后,會(huì)顯示一條成功消息。
備注
如果 SQL Server 安裝了多個(gè) SQL Server 實(shí)例,則必須將 NT Service\AzureWLBackupPluginSvc 帳戶的 sysadmin 權(quán)限添加到所有 SQL 實(shí)例。
將 NT AUTHORITY\SYSTEM 和 NT Service\AzureWLBackupPluginSvc 登錄名添加到 SQL Server 實(shí)例:
在對(duì)象資源管理器中轉(zhuǎn)到該 SQL Server 實(shí)例。
導(dǎo)航到 "安全- > 登錄名"
右鍵單擊“登錄名”,并選擇“新建登錄名…”
轉(zhuǎn)到“常規(guī)”選項(xiàng)卡并輸入 NT AUTHORITY\SYSTEM 作為登錄名。
轉(zhuǎn)到“服務(wù)器角色”,選擇“public”和“sysadmin”角色。
轉(zhuǎn)到“狀態(tài)”。 授予連接到數(shù)據(jù)庫(kù)引擎的權(quán)限,并將“登錄名”設(shè)置為“已啟用”。
選擇“確定”。
重復(fù)相同的步驟序列(上述步驟 1-7),將 NT Service\AzureWLBackupPluginSvc 登錄名添加到 SQL Server 實(shí)例。 如果該登錄名已存在,請(qǐng)確保它具有 sysadmin 服務(wù)器角色并處于這種狀態(tài):已授予連接到數(shù)據(jù)庫(kù)引擎的權(quán)限,且“登錄名”設(shè)置為“已啟用”。
在授予權(quán)限后,在門戶中重新發(fā)現(xiàn)數(shù)據(jù)庫(kù):保管庫(kù)- 備份基礎(chǔ)結(jié)構(gòu)-Azure VM 中的 工作負(fù)荷:
或者,可以在管理員模式下運(yùn)行以下 PowerShell 命令,來自動(dòng)授予權(quán)限。 實(shí)例名稱默認(rèn)設(shè)置為 MSSQLSERVER。 根據(jù)需要更改腳本中的實(shí)例名稱參數(shù):
PowerShell復(fù)制
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}