You need to enable JavaScript to run this app.
导航
按时间点进行库表恢复
最近更新时间:2024.08.28 17:13:20首次发布时间:2023.11.30 10:27:54

云数据库 veDB MySQL 版支持库表恢复,可以将已有备份集或任意可恢复时间点的库和表恢复至原实例中,并且不影响原实例中现有的库表,而是在原实例中,重新创建库和表。本文介绍如何按时间点进行库表恢复。

前提条件

  • 创建实例,且实例处于运行中状态。

  • 已存在可恢复的时间点。

原理介绍

根据产品架构设计原理,库表恢复操作完成后实例可能会存在一段不可恢复的区间。这是由于为了提升恢复性能,veDB MySQL 在进行库表恢复时会直接向存储池写入最终数据,并不会产生 redo_log。如果新恢复的库表的初始版本在尚未备份的情况下被修改,会导致无法恢复到修改前的状态,从而产生一段永久不可恢复的区间。具体原理如下:

写入过程正常写入过程恢复库表写入过程
示例图alt

说明

veDB 将数据库的全量数据拆分成多个逻辑文件,一个逻辑文件的每次修改操作都是一个 redo_log,后台不定期将 redo_log 应用到逻辑文件上,从而修改了逻辑文件内容,得到一个 checkpoint。备份流程保证启动备份后产生的所有 redo_log 都会备份,但只能备份逻辑文件的某些 checkpoint。恢复一个逻辑文件时,选择目标时刻前的最新 checkpoint 和该 checkpoint 之后、target-ts 之前的全量 redo_log,就能将这个逻辑文件恢复到目标点的状态。
如示例图所示,假如 C1~C3 都是已经备份成功的 checkpoint,当要恢复到 target-ts 时,只需要读取 C2、L4、L5,然后将 L4 和 L5 依次应用到 C2 上就能得到这个逻辑文件 target-ts 时的状态,然后将这个版本的逻辑文件直接写入存储集群。

库表恢复完成后,新恢复的表就可以写入 redo_log。由于逻辑文件内容随时可能因为应用了 redo_log 而改变,而备份逻辑文件需要时间,无法保证备份出逻辑文件的初始状态。若逻辑文件的初始状态未备份就被修改,那就会存在一个永远不可恢复的区间。
如示例图所示,C1 是库表恢复时写入的初始数据,C2、C3 是应用了一些 redo_log 之后的 checkpoint,L0~L5 是库表恢复完成后前台新写入的 redo_log。如果 C1 未备份,只备份了 C2 和 C3,即使 L0 和 L1 都备份了,也永远无法恢复到 C2 之前的状态。

注意事项

  • 进行库表恢复时,若指定的库名在原实例中已存在,则执行库表恢复会失败。

  • 库表恢复期间不允许对实例做规格变更,重启,删除等操作。

  • 库表恢复过程中,DML 操作始终可正常进行。

  • 若原实例使用冷热分离存储,在进行数据恢复时,原表的冷热状态不同,则恢复完成后目标表的状态也不同,详情请参见备份恢复

使用限制

  • 单次最多支持恢复的整库和单表的总数不能超过 100 个。选择恢复整库时,支持恢复该库下所有的表。

    说明

    若单次选择恢复的表数量过多,库表恢复所需的时间会比较长,因此不建议一次性恢复过多的表。在这种情况下,建议使用全量恢复,具体操作方法请参见按备份集进行全量恢复按时间点进行全量恢复

  • 仅支持使用库表恢复功能上线后的可恢复时间点恢复历史库表。

  • 使用库表恢复功能进行库表恢复时,目标时刻中数据表的总数不能超过 5 万张。

  • 库表恢复功能不支持恢复触发器(Trigger)和外键(Foreign Key),若原表设置了 Trigger 或 Foreign Key,则 Trigger 或 Foreign Key 不会被恢复。

  • 库表恢复功能针对全文索引场景,支持恢复最普通的单列、复合全文索引,支持多列升降序。不支持恢复索引注释、Functional Key Parts、不可见索引或其他高级特性的全文索引。若恢复特殊全文索引,则会退化成只有基础特性的全文索引或恢复后的表中不带索引。

操作步骤

  1. 登录云数据库 veDB MySQL 版控制台

  2. 在顶部菜单栏的左上角,选择实例所属的项目和地域。

  3. 实例列表页面,单击目标实例名称。

  4. 备份恢复页签,单击库表恢复

  5. 库表恢复页面,设置以下参数项。

    参数说明
    恢复方式选择按时间点。
    恢复时间点选择需要恢复的时间点。
    恢复到默认为原实例

    选择库表

    1. 全部实例库表区域中选择需要恢复的库表。库表选择有如下两种场景:
      • 整库选中:直接勾选目标数据库名称,表示恢复该库下所有表的数据。并且恢复后的表名不支持设置,默认为原表名,仅支持设置恢复后的库名,且不能与原库名相同。
      • 部分选中:部分选中支持分别设置恢复后的库名和表名,恢复后的表名可以与原表名相同,但恢复后的库名不能与原库名相同。部分选中存在以下两种操作情况:
        • 展开目标数据库,勾选部分表。
        • 展开目标数据库,依此手动勾选该库下所有的表。

      说明

      • 您可以在搜索栏输入库名或表名进行搜索,支持模糊匹配。在搜索表时,需要先输入该表所属的完整数据库名称。
      • 单次最多支持恢复的整库和单表的总数不能超过 100 个。选择恢复整库时,支持恢复该库下所有的表。
      • 每个实例显示的库上限为 5000 个,每个库展开后显示的表上限为 5000 个。
        • 当实例中库或表的数量超过 5000 个后,未显示的库或表请通过搜索功能,进行选中。
        • 勾选全部库表,表示选择所有显示的数据库,上限为 5000 个。
    2. 已选择区域中,可以查看到已选择的待恢复库表。

      说明

      您可以单击已选择库表后的 ×,移除该库表。或单击一键清空,清空所有已选择的库表。

  6. 单击下一步,对已选库表进行配置。

    参数说明

    不可恢复库表信息

    展示已选择的库表中是否包含不可恢复的库表信息,无需配置。

    • 若选择的库中包含不可恢复的表,则会自动移除这些表。
    • 若目标数据库下无可恢复的表,则会整库移除。

    已选库表设置

    已选库表设置区域中为待恢复的库表设置恢复后的名称。

    • 单个设置新库表名
      恢复后库表名列,分别为目标库或目标表设置恢复后的名称,规则如下:
      • 需由小写字母开头,小写字母或数字结尾。
      • 长度需要在 2~64 个字符内。
      • 由小写字母、数字、中划线(-)、下划线(_)组成。
    • 批量设置新库表名
      单击恢复后库表名后的批量设置,分别为所有库名表名设置前缀和后缀,前缀和后缀的设置需满足库表名称规则。例如若原库名为 testdb,前缀设置为 p_,后缀设置为 _bak,则恢复后的库名为 p_testdb_bak

    说明

    • 设置恢复后的库名和表名时需注意,新库名不能与原库名相同,否则执行库表恢复操作会失败。
    • 若您未设置恢复后的库表名,默认在原库表名称后添加 _bak,例如原表为 table,则恢复后的表名默认为 table_bak
    • 您可以单击已选择库表后的 ×,移除该库表。
  7. 单击确定

相关 API

API描述
DescribeRecoverableTables调用 DescribeRecoverableTables 接口查询指定实例可恢复的库和表。
RestoreTable调用 RestoreTable 接口将 veDB MySQL 实例的历史数据库和表恢复至原实例中。