本节主要介绍如何通过命令和 OCP 的方式进行物理恢复,目前 OceanBase 数据库支持租户级别的基于时间点的恢复。

通过命令进行恢复

恢复会先根据用户输入的命令,从备份的目的地将全量备份恢复回来。之后,再将增量备份恢复到全量备份上面。最后,应用备份出去的事务日志。

说明

本节中的操作需要使用 root 用户在 sys 租户上执行。

  1. 执行以下语句,停止日志备份。

    1. obclient> ALTER SYSTEM NOARCHIVELOG;

    说明

    由于当前版本暂不支持日志备份在集群上发起恢复,如果发起恢复,则会导致日志备份断流,故建议在执行恢复前先停止日志备份。

  2. 创建 Unit(资源单元)。

    示例如下:

    1. obclient> CREATE RESOURCE UNIT box_16c96g max_cpu 16, max_memory 103079215104, max_iops 10240, max_disk_size 53687091200, max_session_num 64, MIN_CPU=16, MIN_MEMORY=103079215104, MIN_IOPS=10240;
  3. 创建 Resource Pool(资源池)。

    示例如下:

    1. obclient> CREATE RESOURCE POOL restore_pool unit = 'box_16c96g', unit_num = 1, zone_list = ('z1','z2','z3');
  4. 执行以下语句,设置加密信息。

    说明

    如果未加密或恢复时可以访问原来的 KMS,则跳过本步骤。

    1. obclient> SET @kms_encrypt_info = '<加密string>';

    其中,<加密string>EXTERNAL_KMS_INFO 的值,EXTERNAL_KMS_INFO 为租户级配置项。

  5. 打开恢复配置。

    检查 restore_concurrency 是否为 0,如果为 0 ,则需要执行以下语句:

    1. obclient> ALTER SYSTEM SET restore_concurrency = 50;
  6. (可选)修改恢复的等待时间。

    默认恢复等待时间 _restore_idle_time 为 1 分钟,整个恢复期间会有 3 次等待,即 3 分钟的等待时间。对于测试恢复性能的场景,为了减少恢复的空闲时间,您可以执行以下语句将等待时间调整为 10s

    1. obclient> ALTER SYSTEM SET _restore_idle_time = '10s';
  7. 根据现场需要,设置恢复的密码。

    1. obclient> SET DECRYPTION IDENTIFIED BY 'password';

    只有在备份时添加了密码的场景下才需要设置恢复的密码。同时如果全量备份+增量备份设置的密码不一样,则需要输入多个密码,密码之间使用逗号分隔。示例如下:

    1. obclient> SET DECRYPTION IDENTIFIED BY 'password1''password2';
  8. 执行以下语句,开始执行恢复任务。

    1. obclient> ALTER SYSTEM RESTORE <dest_tenantname> FROM <source_tenantname> at 'uri' UNTIL 'timestamp' WITH 'restore_option';

    部分参数说明如下表所示。

    参数

    描述

    dest_tenantname

    指恢复的新租户的名称。

    source_tenantname

    指原集群的租户。

    uri

    指备份时设置的 backup_dest

    timestamp

    指恢复的时间戳,需要大于等于最早备份的数据备份的 CDB_OB_BACKUP_SET_DETAILS START_TIME,小于等于日志备份 CDB_OB_BACKUP_ARCHIVELOG_SUMMARYMAX_NEXT_TIME

    restore_option

    支持 backup_cluster_namebackup_cluster_idpool_listlocalitykms_encrypt

    • backup_cluster_name 为必选项,填写源集群的名称

    • backup_cluster_id 为必选项,填写源集群的 cluster_id

    • pool_list 为必选项,填写用户的资源池

    • locality 为可选项,填写租户的 Locality 信息

    • kms_encrypt 为可选项,为 true 则表示在恢复时需要使用步骤 4 指定的 kms_encrypt_info

    恢复示例:

    • NFS

      1. obclient> ALTER SYSTEM RESTORE restored_trade FROM trade at 'file:///data/nfs/backup' until '2020-05-21 09:39:54.071670' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool;
    • OSS

      1. obclient> ALTER SYSTEM RESTORE restored_trade FROM trade at 'oss://antsys-oceanbasebackup/backup_rd/?host=cn-hangzhou-alipay-b.oss-cdn.aliyun-inc.com&access_id=xxx&access_key=xxx' until ' 2020-03-23 08:59:45' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool';
    • 腾讯云 COS

      1. obclient> ALTER SYSTEM RESTORE restored_trade from trade at 'cos://backup-1304745170/backup_rd/20210127?host=cos.ap-nanjing.myqcloud.com&access_id=xxx&access_key=xxx&appid=xxx' until ' 2020-03-23 08:59:45' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool';
  9. 执行以下语句,查看恢复进度。

    • 查看系统表 Root Table:

      1. obclient> SELECT svr_ip,role, is_restore, COUNT(*) FROM __all_root_table AS a, (SELECT value FROM __all_restore_info WHERE name='tenant_id') AS b WHERE a.tenant_id=b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;

      其中,is_restore 的取值含义如下:

      • 0:表示正常副本

      • 1:表示逻辑恢复的副本

      • 2:表示物理恢复需要恢复基线的副本

      • 3:表示物理恢复需要恢复转储的副本

      • 4:物理恢复需要恢复 clog 的副本

      • 5:物理恢复需要转储的副本

      • 6:物理恢复等待所有副本转储完成的副本

      • 7:物理恢复设置 member list 的副本

      role 的取值含义如下:

      • 1:表示 Leader

      • 2:表示 Follower

      • 3:表示恢复中的 Leader

    • 查看用户表 Meta Table:

      1. obclient> SELECT svr_ip,role, is_restore, COUNT(*) FROM __all_virtual_meta_table AS a, (SELECT value FROM __all_restore_info WHERE name='tenant_id') AS b WHERE a.tenant_id=b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;

      或者

      1. obclient> SELECT svr_ip ,is_restore, COUNT(*) FROM __all_virtual_partition_store_info WHERE tenant_id>1002 group by svr_ip,is_restore order by svr_ip, is_restore;
  10. 执行以下语句,查看恢复结果。

    1. obclient> SELECT * FROM __all_restore_info;
    1. obclient> SELECT * FROM __all_restore_history;

通过 OCP 进行恢复

您也可以在 OCP 上对已备份的集群发起恢复操作。

说明

不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。

  1. 登录 OCP。

  2. 在左侧导航栏上,单击 备份恢复 > 恢复

  3. 在页面右上角单击 发起恢复

  4. 设置存储配置。

    存储配置相关说明如下表所示。

    配置

    描述

    存储类型

    支持 OSSFile 两种类型

    存储目录

    存储目录:

    • 存储类型OSS 时,示例如下:

      1. oss://antsys-oceanbasebackup/backup_rd/
    • 存储类型File 时,示例如下:

      1. file:///data/nfs/backup

    访问域名访问用户访问秘钥

    如果选择的 存储类型OSS ,则需要输入访问域名、访问用户和访问密钥后,然后单击 测试,确认可访问。

    如果已经有可用的配置,可以直接在 存储配置 区域的右上角单击 选择已有配置,并选择对应的配置后,系统会自动解析存储配置。

  5. 选择 恢复源与时间

    在列表中选择 源集群****源租户恢复的时间点

    选择恢复源

  6. 选择恢复的目标租户。

    在列表中选择运行状态的集群,并在 租户名称 文本框中输入新的租户名称。

    恢复目标

  7. 对恢复的租户进行 Zone 配置,选择 副本类型****Unit 规格Unit 数量,并对 Zone 进行优先级排序。

  8. 单击 发起恢复