物理还原即使用sys_rman将当时做备份的物理文件恢复回来,但由于物理备份时,数据库还是会有不断的数据写入,因此拷贝过程中,物理文件可能已经发生了变化。数据库在物理还原(以下简称还原)结束后,还要进行数据库自己的恢复(以下简称恢复)过程,才能最终达成数据库一致性状态,对外提供服务。
因此,真正恢复数据库到用户所用状态,分为了还原和恢复两个部分。
注意
还原和恢复完成之后,应该尽快进行一次全量备份。
目录
6.1. 还原 ¶
还原操作说明:
-
还原动作,只能在数据库节点上进行。
-
还原完成后,数据库启动后,请及时手动清除kingbase.auto.conf文件中还原过程写入的相关还原参数。
-
若是集群环境,还原后的数据库节点将成为集群的新主节点,利用该节点重做备库,参考《KingbaseES主备和读写分离集群使用手册》;集群完整启动后,可选择新的主节点。
-
还原时,需要确保kingbase进程已经停止。
-
还原时,KB_DATA目录下如果还有文件存在,需要--delta选项进行选择性还原。
-
还原时,KB_DATA目录下如果没有文件存在,以下的还原方式均可使用。
还原命令格式:
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=<配置文件> --stanza=<名称> --<还原选项> restore
6.1.1. 测试性质的还原 ¶
还原恢复之后,新产生的WAL文件会继续归档到REPO存储目录中,将改变原有的备份集。
进行测试性质的还原:指定新的DATA目录和临时禁止归档WAL文件
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --kb1-path=/new_path/data --archive-mode=off restore
6.1.2. 基于最新备份的还原 ¶
默认还原,将最新的备份集还原到数据库实例的data目录下。
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase restore
6.1.3. 指定备份集还原 ¶
不指定时间,工具将隐式地指定时间为备份集结束时间的后一秒。
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --set='20200519-031336F' restore
指定时间,工具将验证指定时间是否晚于备份集结束时间;如否,报错退出。
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --set='20200519-031336F' --type=time --target='2020-05-19 16:28:17' restore
备份节点名的查看,请参考 附录B:sys_rman.conf配置说明 ;--delta选项可选,用于KB_DATA目录存在文件时;
6.1.4. 指定事务ID还原 ¶
使用指定的xid还原到特定状态,必须同时指定该xid之前的备份集,才能够恢复到该xid。
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --type=xid --target='445566' --set='20210611-011416F_20210611-023050I' restore
--delta选项可选,用于KB_DATA目录存在文件时
--target-exclusive选项可选,用于表示是否排除等于指定xid的内容。
注意
如果出现如下提示,说明当前的选项有误。
ERROR: [032]: Current options maybe restore to newest data from archive WAL files Please specify --type=xid --target='xx' --set='2021xxxx-xxxxxxX_2021xxxx-xxxxxxX' or follow the user guide Stop current restore.
6.1.5. 指定时间点还原 ¶
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --type=time --target='2020-05-07 16:28:17' restore
使用指定的时间点还原到特定状态
--delta选项可选,用于KB_DATA目录存在文件时
--target-exclusive选项可选,用于表示是否排除等于指定时间的内容。
--target-action=pause 默认选项,恢复完成后,数据库启动后进入只读状态
--target-action=promote 恢复完成后,switch timeline,数据库启动后进入读写状态
--target-action=shutdown 恢复完成后,关闭数据库
6.1.6. 表空间支持 ¶
备份时,表空间是默认地、隐式地包含在备份文件集中。
还原时,工具默认把KB_DATA/sys_tblspc/ 的软连接指向原有的自定义表空间文件夹(创建表空间时指定的location),
--link-all 选项可选,如果设置,将软连接指向新的自定义表空间文件夹。
注意
程序在选择创建自定义表空间之前的备份集,还原到创建自定义表空间后的时间点,程序不会自动创建自定义的表空间目录。
建议在还原操作执行之前,手动创建自定义表空间目录。
此外,支持:
-
表空间映射,在恢复时,对单个表空间进行重定向
例如:--tablespace-map=ts_01=/db/ts_01
注意
此配置非常危险,除非管理员明确原因及后果方可执行。
-
所有表空间映射,在恢复时,对所有表空间进行重定向,这样非常便于开发以及遇到存储故障时的处理。
例如:--tablespace-map-all=/data/tablespace
注意
此配置非常危险,除非管理员明确原因及后果方可执行。
6.1.7. 还原后节点处理 ¶
在kingbase的主配置hot_standby=on的情况下,此选项有效。
--target-action=pause 默认选项,恢复完成后,数据库启动后进入只读状态
--target-action=promote 恢复完成后,switch timeline,数据库启动后进入读写状态
--target-action=shutdown 恢复完成后,关闭数据库
根据物理备份还原的理念,还原后,数据库用户的密码同时还原到指定备份集或时间点的状态。
如果需要,请使用超级管理员去重置相关的数据库用户的密码。
6.2. 恢复 ¶
数据恢复过程,指的是经过还原动作后,新的数据库实例拥有了基本的数据文件,第一次启动数据库时,数据库根据恢复配置文件去拉取归档的WAL日志,进行REDO的过程。
恢复配置文件位于/kingbase.auto.conf,涉及恢复的部分主要包含以下配置项:
restore_command
配置为sys_rman工具archive-get命令,负责拉取归档的WAL日志,拉取的范围由后续参数确定。
如果没有recover_target_*相关选项,将自动拉取所有的归档WAL文件并执行REDO动作,将数据还原到最新的状态。
recovery_target_time
还原使用PITR功能--type=time时,填充相关值。
recovery_target_xid
还原使用PITR功能--type=xid时,填充相关值。
recovery_target_timeline
还原使用功能--target-timeline时,填充相关值。
recovery_target_action
还原使用功能--target-action时,填充相关值。
6.2.1. PITR的恢复策略 ¶
注意
指定备份集、指定事务ID、指定时间点均属于PITR方式,上述方式还原后,需要谨慎地进行恢复。
PITR还原后,默认恢复方式为pause,启动数据库后只能执行只读操作以检查是否符合恢复预期,若符合恢复预期请执行select sys_wal_replay_resume(),之后数据库进入读写状态;若不符合恢复预期,请关闭并删除该数据库,重新做还原。
当仅用来测试数据是否恢复到某个想要的恢复点时,无须执行select sys_wal_replay_resume(),执行实际数据查询即可;但需要注意,数据库开始接受只读查询并不表示已经恢复到指定状态,需执行select sys_is_wal_replay_paused()来判断,如果是true表明数据库已经恢复完成。
当恢复完成的数据库实例需要继续投入生产时,执行select sys_wal_replay_resume(),数据库进入读写状态。
例外的情况,当PITR指定的时间超过了所有备份集的时间覆盖范围,则数据库REDO过程中始终无法找到想要停止的点,直到拉取了所有的归档WAL日志;此时,数据库自动跳过REDO模式,进入读写状态,在此场景下无须执行select sys_wal_replay_resume()。
注意
在PITR操作中,如果设置的恢复时间点刚好处于不支持回滚的DDL语句(例如DROP DATABASE)的时间戳之前,则会出现一些异常情况,详情请参阅《KingbaseES物理备份恢复最佳实践》
6.2.2. 集群还原恢复策略 ¶
如果集群中一个节点出现严重问题时,应该采用repmgr工具的clone功能恢复集群;
新节点上线后,使用repmgr工具接入集群中。
如果集群所有节点都出现严重问题时,采用工具sys_rman进行还原:
-
选择一个数据库节点,使用还原功能;
-
在新的主节点上,启动数据库
-
如果还原时使用了PITR功能(含指定备份集或指定时间等),在clone之前,删除刚刚还原的主节点的/kingbase.auto.conf文件中的recovery_*配置参数,包含restore_command,recovery_target,recovery_target_action等
-
使用repmgr工具在备库节点clone并register到主节点;
-
整个集群恢复正常工作状态。
kingbase.auto.conf配置文件示例,PITR还原后,如图的末尾三行应该删除