恢复概述
OceanBase 数据库提供租户级别的恢复能力,支持微秒级别的恢复精度。
租户恢复保证了跨表、跨分区的全局一致性。
OceanBase 数据库的恢复主要包含下面几步:
恢复系统表的数据。
恢复系统表的日志。
修正系统表的数据。
恢复用户表的数据。
恢复用户表的日志。
对于单个分区来说,备份+恢复的流程和重启的流程比较类似,主要就是加载数据和应用日志。
恢复系统表的数据
RootService 根据数据备份的系统表的列表创建对应的分区,然后依次调度分区的 Leader 从备份的介质上拷贝分区的元信息、宏块数据。
恢复系统表的日志
日志恢复和重启后回放日志的流程比较类似,恢复的分区的 Leader 在完成数据恢复后,会主动从备份介质上拉取备份的分区级别的日志并保存到本地的 Clog 目录。Leader 将恢复的日志保存到本地的同时,Clog 回放的线程会同时开始回放数据到 MEMStore。等所有的 Clog 都恢复完成以后,一个分区的恢复就完成了。
修正系统表的数据
系统表恢复完成后,RootService 会进行系统表数据的修复:
清理未建完的索引表。
老版本的备份被恢复到新版本的集群上的兼容补偿:
补建新加的系统表
补偿跨版本的升级任务
恢复用户表
用户表的数据、日志的恢复流程和系统表类似,唯一的区别是创建分区的列表依赖的数据源不同。恢复用户表的时候,RootService 是从已经恢复的系统表中读取相关列表的。
恢复事务的一致性
OceanBase 数据库的物理备份恢复强依赖租户的 GTS 功能,GTS 保证了备份和恢复的数据是全局一致的。
逻辑恢复
V2.2.7 版本以后 OceanBase 数据库不再提供集群级别的逻辑备份恢复功能,提供了数据的逻辑备份的 OBDUMPER 工具和逻辑恢复的 OBLOADER 工具。该工具是 java 开发的客户端导入工具,提供了支持 SQL 或者 CSV 格式的数据导入,也支持导入的限流、断点恢复的能力。




