你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

执行时间点还原

使用时间点还原 (PITR),可以创建一个数据库作为另一个数据库在过去某个时间点但未超出保留期的副本。 本文介绍如何在 Azure Arc 启用的 SQL 托管实例中进行数据库的时间点还原。

时间点还原可以通过以下方式还原数据库:

  • 从现有数据库进行还原
  • 还原到 Azure Arc 启用的同一 SQL 托管实例上的新数据库

可以将数据库还原到预配置的保留设置中的某个时间点。 可按如下所示检查 Azure Arc 启用的 SQL 托管实例的保留设置:

对于直接连接模式

az sql mi-arc show --name <SQL instance name> --resource-group <resource-group>
#Example
az sql mi-arc show --name sqlmi --resource-group myresourcegroup

对于间接连接模式

az sql mi-arc show --name <SQL instance name> --k8s-namespace <SQL MI namespace> --use-k8s
#Example
az sql mi-arc show --name sqlmi --k8s-namespace arc --use-k8s

目前,时间点还原可以通过以下方式还原数据库:

  • 从实例上的现有数据库进行还原
  • 还原到同一实例上的新数据库

自动备份

Azure Arc 启用的 SQL 托管实例启用了内置的自动备份功能。 每当你新建或还原数据库时,Azure Arc 启用的 SQL 托管实例就会立即启动完整备份,并自动计划差异和事务日志备份。 SQL 托管实例将这些备份存储在部署期间指定的存储类中。

使用时间点还原可将数据库还原到保留期内的特定时间点。 为了将数据库还原到特定的时间点,已启用 Azure Arc 的数据服务会按特定顺序应用备份文件。 例如:

  1. 完整备份
  2. 差异备份
  3. 一个或多个事务日志备份

Point-in-time restore

目前,完整备份每周创建一次,差异备份每隔 12 小时创建一次,事务日志备份每隔 5 分钟创建一次。

保持期

Azure Arc 启用的新 SQL 托管实例的默认保留期为 7 天,可调整为 0 天或者 1-35 天的值。 在部署 SQL 托管实例期间,可以通过指定 --retention-days 属性来设置保留期。 超过配置的保留期的备份文件将自动删除。

使用 az CLI 从某个时间点创建数据库

az sql midb-arc restore --managed-instance <SQL managed instance> --name <source DB name> --dest-name <Name for new db> --k8s-namespace <namespace of managed instance> --time "YYYY-MM-DDTHH:MM:SSZ" --use-k8s
#Example
az sql midb-arc restore --managed-instance sqlmi1 --name Testdb1 --dest-name mynewdb --k8s-namespace arc --time "2021-10-29T01:42:14.00Z" --use-k8s

还可以使用 --dry-run 选项来验证还原操作,而无需实际还原数据库。

az sql midb-arc restore --managed-instance <SQL managed instance> --name <source DB name> --dest-name <Name for new db> --k8s-namespace <namespace of managed instance> --time "YYYY-MM-DDTHH:MM:SSZ" --use-k8s --dry-run
#Example
az sql midb-arc restore --managed-instance sqlmi1 --name Testdb1 --dest-name mynewdb --k8s-namespace arc --time "2021-10-29T01:42:14.00Z" --use-k8s --dry-run

使用 kubectl 从某个时间点创建数据库

  1. 若要使用 Kubernetes 原生工具执行时间点还原,可以使用 kubectl。 创建任务规范 yaml 文件。 例如:

    apiVersion: tasks.sql.arcdata.microsoft.com/v1
    kind: SqlManagedInstanceRestoreTask                 
    metadata:                                       
      name: myrestoretask20220304
      namespace: test                              
    spec:                                           
      source:                                       
        name: miarc1                                
        database: testdb                            
      restorePoint: "2021-10-12T18:35:33Z"          
      destination:                                  
        name: miarc1                           
        database: testdb-pitr
      dryRun: false  
    
  2. 编辑属性如下:

    1. name: 每个自定义资源 (CR) 的唯一字符串。 Kubernetes 所需。
    2. namespace: 实例所在的 Kubernetes 命名空间。
    3. source: ... name: 源实例的名称。
    4. source: ... database: 从中应用还原的源数据库的名称。
    5. restorePoint: 还原操作的时间点(使用 UTC 日期/时间格式)。
    6. destination: ... name: 已启用目标 Arc 的 SQL 托管实例的名称。 目前只有 Arc SQL 托管实例支持时间点还原。 这应该与源 SQL 托管实例相同。
    7. destination: ... database: 要将还原应用到的新目标数据库的名称。
  3. 创建任务以启动时间点还原。 以下示例启动中 myrestoretask20220304.yaml 定义的任务。

    kubectl apply -f myrestoretask20220304.yaml
    
  4. 检查还原任务状态,如下所示:

    kubectl get sqlmirestoretask -n <namespace>
    

还原任务状态将基于 PITR 进度大约每 10 秒更新一次。 状态会从 Waiting 过渡到 Restoring 再到 CompletedFailed

使用 Azure Data Studio 从某个时间点创建数据库

还可以从 Azure Data Studio 将数据库还原到某个时间点,如下所示:

  1. 启动 Azure Data Studio
  2. 确保已安装工具中所述的所需 Arc 扩展。
  3. 连接到 Azure Arc 数据控制器
  4. 展开数据控制器节点,右键单击实例并选择“管理”。 Azure Data Studio 将启动 SQL 托管实例仪表板。
  5. 在仪表板中单击“备份”选项卡
  6. 应会看到 SQL 托管实例上的数据库列表及其最早和最新的还原时段,以及一个用于启动“还原”的图标
  7. 单击要从其还原的数据库对应的图标。 Azure Data Studio 将在右侧启动一个边栏选项卡
  8. 在该边栏选项卡中提供所需的输入,然后单击“还原”

监视进度

启动还原后,将在 Kubernetes 群集中创建一个任务,该任务执行完整、差异和日志备份的实际还原操作。 可以从 Kubernetes 群集监视此活动的进度,如下所示:

kubectl get sqlmirestoretask -n <namespace>
#Example
kubectl get sqlmirestoretask -n arc

可以通过对任务运行 kubectl describe 来获取该任务的更多详细信息。 例如:

kubectl describe sqlmirestoretask <nameoftask> -n <namespace>

配置保留期

可以从 Azure Arc 启用的 SQL 托管实例的原始设置重新配置其保留期,如下所示:

警告

如果缩短当前的保留期,则无法还原到早于新保留期的时间点。 会删除新保留期内不再需要为提供 PITR 而保留的备份。 如果延长当前的保留期,则无法立即在新的保留期内获得恢复到旧时间点的能力。 随着时间推移,你将获得这一能力,因为系统开始将备份保留更长时间。

对于启用 Azure Arc 的 SQL 托管实例,--retention-period 可以按以下方式进行更改。 以下命令适用于 directindirect 这两种连接模式。

az sql mi-arc update  --name <SQLMI name> --k8s-namespace <namespace>  --use-k8s --retention-days <retentiondays>

例如:

az sql mi-arc update  --name sqlmi --k8s-namespace arc  --use-k8s --retention-days 10

禁用自动备份

可以通过将 --retention-days 属性设置为 0,为 Azure Arc 启用的 SQL 托管实例的特定实例禁用内置自动备份,如下所示。 以下命令适用于 direct 模式和 indirect 模式。

警告

如果为 Azure Arc 启用的 SQL 托管实例禁用自动备份,则会删除已配置的任何自动备份,因此你无法进行时间点还原。 如果需要,可以更改 retention-days 属性以重新启动自动备份。

az sql mi-arc update  --name <SQLMI name> --k8s-namespace <namespace>  --use-k8s --retention-days 0

例如:

az sql mi-arc update  --name sqlmi --k8s-namespace arc  --use-k8s --retention-days 0

监视器备份

备份存储在 /var/opt/mssql/backups/archived/<dbname>/<datetime> 文件夹下,其中 <dbname> 是数据库的名称,<datetime> 是一个采用 UTC 格式的时间戳,表示每个完整备份的开始。 每次启动完整备份时,将创建一个新文件夹,其中包含完整备份以及所有后续差异备份和事务日志备份。 最新的完整备份及其后续差异备份和事务日志备份都存储在 /var/opt/mssql/backups/current/<dbname><datetime> 文件夹下。

限制

Azure Arc 启用的 SQL 托管实例的时间点还原具有以下限制:

  • 时间点还原是数据库级别的功能,而不是实例级别的功能。 无法通过时间点还原来还原整个实例。
  • 只能还原到从中创建了备份的、Azure Arc 启用的同一个 SQL 托管实例。

详细了解 Azure Arc 启用的 SQL 托管实例的特性和功能

首先创建数据控制器

创建 Azure Arc 启用的 SQL 托管实例