云数据库 veDB MySQL 版支持库表恢复,可以将已有备份集或任意可恢复时间点的库和表恢复至原实例中,并且不影响原实例中现有的库表,而是在原实例中,重新创建库和表。本文介绍如何按时间点进行库表恢复。
已创建实例,且实例处于运行中状态。
已存在可恢复的时间点。
根据产品架构设计原理,库表恢复操作完成后实例可能会存在一段不可恢复的区间。这是由于为了提升恢复性能,veDB MySQL 在进行库表恢复时会直接向存储池写入最终数据,并不会产生 redo_log。如果新恢复的库表的初始版本在尚未备份的情况下被修改,会导致无法恢复到修改前的状态,从而产生一段永久不可恢复的区间。具体原理如下:
写入过程 | 正常写入过程 | 恢复库表写入过程 |
---|---|---|
示例图 | ||
说明 | veDB 将数据库的全量数据拆分成多个逻辑文件,一个逻辑文件的每次修改操作都是一个 redo_log,后台不定期将 redo_log 应用到逻辑文件上,从而修改了逻辑文件内容,得到一个 checkpoint。备份流程保证启动备份后产生的所有 redo_log 都会备份,但只能备份逻辑文件的某些 checkpoint。恢复一个逻辑文件时,选择目标时刻前的最新 checkpoint 和该 checkpoint 之后、target-ts 之前的全量 redo_log,就能将这个逻辑文件恢复到目标点的状态。 | 库表恢复完成后,新恢复的表就可以写入 redo_log。由于逻辑文件内容随时可能因为应用了 redo_log 而改变,而备份逻辑文件需要时间,无法保证备份出逻辑文件的初始状态。若逻辑文件的初始状态未备份就被修改,那就会存在一个永远不可恢复的区间。 |
进行库表恢复时,若指定的库名在原实例中已存在,则执行库表恢复会失败。
库表恢复期间不允许对实例做规格变更,重启,删除等操作。
库表恢复过程中,DML 操作始终可正常进行。
若原实例使用冷热分离存储,在进行数据恢复时,原表的冷热状态不同,则恢复完成后目标表的状态也不同,详情请参见备份恢复。
单次最多支持恢复的整库和单表的总数不能超过 100 个。选择恢复整库时,支持恢复该库下所有的表。
说明
若单次选择恢复的表数量过多,库表恢复所需的时间会比较长,因此不建议一次性恢复过多的表。在这种情况下,建议使用全量恢复,具体操作方法请参见按备份集进行全量恢复和按时间点进行全量恢复。
仅支持使用库表恢复功能上线后的可恢复时间点恢复历史库表。
使用库表恢复功能进行库表恢复时,目标时刻中数据表的总数不能超过 5 万张。
库表恢复功能不支持恢复触发器(Trigger)和外键(Foreign Key),若原表设置了 Trigger 或 Foreign Key,则 Trigger 或 Foreign Key 不会被恢复。
库表恢复功能针对全文索引场景,支持恢复最普通的单列、复合全文索引,支持多列升降序。不支持恢复索引注释、Functional Key Parts、不可见索引或其他高级特性的全文索引。若恢复特殊全文索引,则会退化成只有基础特性的全文索引或恢复后的表中不带索引。
在顶部菜单栏的左上角,选择实例所属的项目和地域。
在实例列表页面,单击目标实例名称。
在备份恢复页签,单击库表恢复。
在库表恢复页面,设置以下参数项。
参数 | 说明 |
---|---|
恢复方式 | 选择按时间点。 |
恢复时间点 | 选择需要恢复的时间点。 |
恢复到 | 默认为原实例。 |
选择库表 |
|
单击下一步,对已选库表进行配置。
参数 | 说明 |
---|---|
不可恢复库表信息 | 展示已选择的库表中是否包含不可恢复的库表信息,无需配置。
|
已选库表设置 | 在已选库表设置区域中为待恢复的库表设置恢复后的名称。
说明
|
单击确定。
API | 描述 |
---|---|
DescribeRecoverableTables | 调用 DescribeRecoverableTables 接口查询指定实例可恢复的库和表。 |
RestoreTable | 调用 RestoreTable 接口将 veDB MySQL 实例的历史数据库和表恢复至原实例中。 |