Compartilhar via

使用 Azure CLI 在 Azure VM 中备份 SQL 数据库

Azure CLI用于通过命令行或通过脚本创建和管理Azure资源。 本文介绍如何在 Azure VM 中备份 SQL 数据库,并使用Azure CLI触发按需备份。 还可以使用 Azure portal 执行这些作。

本文假定已在 Azure VM 上安装 SQL 数据库。 (还可以使用 Azure CLI 创建 VM)。

本文将指导如何进行以下操作:

  • 创建恢复服务保管库
  • 注册SQL server并发现其上的数据库
  • 在 SQL 数据库上启用备份
  • 触发按需备份

若要查看我们今天支持的备份和还原方案,请参阅 支持矩阵。 有关常见问题,请参阅 常见问题

先决条件

  • 如果希望在本地运行 CLI 引用命令,install Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行Azure CLI。 有关详细信息,请参阅 如何在 Docker 容器中运行Azure CLI

    • 如果使用本地安装,请使用 az login 命令登录到Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅Azure CLI登录。

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用 Azure CLI 的扩展。

    • 运行 az 版本查找已安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

创建恢复服务保管库

恢复服务保管库是一个逻辑容器,用于存储每个受保护资源的备份数据,例如,Azure VM 上运行的Azure VM 或工作负荷,例如 SQL 或 HANA 数据库。 运行受保护资源的备份作业时,该作业会在恢复服务保管库中创建一个恢复点。 然后,可以使用其中一个恢复点将数据还原到给定的时间点。

使用 az backup vault create 命令创建恢复服务保管库。 请使用要保护的 VM 的相同资源组和位置。 了解如何使用 Azure CLI 创建 Windows VMLinux VM

对于本文,我们将使用:

  • 名为 SQLResourceGroup 的资源组
  • 名为 testSQLVM 的 VM
  • chinanorth2 位置的资源。

运行以下命令以创建名为 SQLVault 的保管库。

az backup vault create --resource-group SQLResourceGroup \
    --name SQLVault \
    --location chinanorth2

默认情况下,恢复服务保管库设置为使用异地冗余存储。 Geo-Redundant storage 可确保备份数据复制到次要Azure区域,即使距离主要区域数百英里。 如果需要修改存储冗余设置,请使用 az backup vault backup-properties set 命令。

az backup vault backup-properties set \
    --name SQLVault  \
    --resource-group SQLResourceGroup \
    --backup-storage-redundancy "LocallyRedundant/GeoRedundant"

若要验证保管库是否已成功创建,请使用 az 备份保管库列表命令。 响应显示为:

Location   Name             ResourceGroup
---------  ---------------  -------------  
chinanorth2    SQLVault     	SQLResourceGroup

注册和保护SQL Server

若要将SQL Server注册到恢复服务保管库,请使用 az 备份容器 register 命令。 VMResourceId 是为安装 SQL 而创建的 VM 的资源 ID。

az backup container register --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
    --backup-management-type AzureWorkload \
    --resource-id VMResourceId

备注

如果 VM 与保管库不在同一资源组中,则 SQLResourceGroup 将使用创建了保管库的资源组。

注册SQL server会自动发现其所有当前数据库。 不过,为了发现将来可能添加到已注册 SQL Server 中的任何新数据库,请参阅 在已注册的 SQL Server 中发现新增数据库 一节。

使用 az 备份容器列表命令验证 SQL 实例是否已成功注册到保管库。 响应显示为:

Name                                                    Friendly Name    Resource Group        Type           Registration Status
------------------------------------------------------  --------------   --------------------  ---------      ----------------------
VMAppContainer;Compute;SQLResourceGroup;testSQLVM   	testSQLVM        SQLResourceGroup  		AzureWorkload  Registered

备注

以上输出中的“名称”列是指容器名。 此容器名将在后续部分中用于启用备份并触发它们。 例如,VMAppContainer;Compute;SQLResourceGroup;testSQLVM。

在 SQL 数据库上启用备份

az backup protectable-item list 命令列出了在上一步中注册的 SQL 实例上发现的所有数据库。

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--backup-management-type AzureWorkload \
	--protectable-item-type SQLDataBase
    --output table

应在此列表中找到要备份的数据库,如下所示:

Name                           		Protectable Item Type    ParentName    ServerName    	IsProtected
-----------------------------  		----------------------   ------------  -----------   	------------
sqldatabase;mssqlserver;master      SQLDataBase              MSSQLServer   testSQLVM        NotProtected  
sqldatabase;mssqlserver;model       SQLDataBase              MSSQLServer   testSQLVM        NotProtected  
sqldatabase;mssqlserver;msdb        SQLDataBase              MSSQLServer   testSQLVM        NotProtected  

现在,为 sqldatabase;mssqlserver;master 数据库配置备份。

若要在数据库上逐一配置和保护备份,请使用 az backup protection enable-for-azurewl 命令。 提供要使用的策略名。 若要使用 CLI 创建策略,请使用 az 备份策略 create 命令。 在本文中,我们使用了 testSQLPolicy 策略。

az backup protection enable-for-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --policy-name SQLPolicy \
    --protectable-item-name "sqldatabase;mssqlserver;master"  \
    --protectable-item-type SQLDataBase \
    --server-name testSQLVM \
    --workload-type SQLDataBase \
    --output table

如果有 SQL Always On可用性组并且想要标识可用性组中的可保护数据源,则可以使用相同的命令。 在这里,可保护项类型为 SQLAG。

若要验证上述备份配置是否已完成,请使用 az 备份作业列表命令。 输出如下所示:

Name                                  Operation         Status     Item Name   Start Time UTC
------------------------------------  ---------------   ---------  ----------  -------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup   Completed  master         2019-12-03T03:09:210831+00:00  

az 备份作业列表命令列出了已运行或当前在受保护数据库上运行的所有备份作业(计划或按需),以及注册、配置备份和删除备份数据等其他作。

备注

Azure Backup 在备份运行于 Azure 虚拟机中的 SQL 数据库时,不会自动调整夏令时的变化。

请根据需要手动修改策略。

启用自动保护

对于无缝备份配置,可以使用特定策略自动保护将来添加的所有数据库。 若要启用自动保护,请使用 az backup protection auto-enable-for-azurewl 命令。

由于说明中的操作是备份将来的所有数据库,因此该操作将在 SQLInstance 级别进行。

az backup protection auto-enable-for-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --policy-name SQLPolicy \
    --protectable-item-name "sqlinstance;mssqlserver"  \
    --protectable-item-type SQLInstance \
    --server-name testSQLVM \
    --workload-type MSSQL\
    --output table

触发按需备份

若要触发按需备份,请使用 az backup protection backup-now 命令。

备注

此备份的保持期取决于运行的按需备份的类型。

  • “按需完整备份”将备份保留最少 45 天,最多 99 年。
  • “按需全量复制”接受任何保留值。
  • “按需差异备份”根据策略中设置的计划差异保留来保留备份。
  • “按需日志备份”根据策略中设置的计划日志保留来保留备份。
az backup protection backup-now --resource-group SQLResourceGroup \
    --item-name sqldatabase;mssqlserver;master \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --backup-type Full
    --retain-until 01-01-2040
    --output table

输出如下所示:

Name                                  ResourceGroup
------------------------------------  -------------
e0f15dae-7cac-4475-a833-f52c50e5b6c3  sqlResourceGroup

响应会为你提供任务名称。 可以使用此作业名称通过 az backup job show 命令跟踪作业状态。

后续步骤

  • 了解如何使用 CLI Azure VM 中存储 SQL 数据库
  • 了解如何使用 Azure portal 备份在 Azure VM 中运行的 SQL 数据库。