KingbaseES V8R6运维案例之---数据库resetwal后启动失败

发布时间 2023-09-18 15:53:37作者: KINGBASE研究院
          KingbaseES  V8R6运维案例之---数据库resetwal后启动失败

案例说明:
KingbaseES V8R6集群触发failover切换后,原主库自动recovery失败,现在需要将原主库启动为单实例的数据库运行,在执行了resetwal后,启动数据库失败。sys_log记录以下故障信息:

适用版本:
KingbaseES V8R6

一、问题分析

集群原主库failover后执行rewind失败,先将原主库启动为单实例数据库,执行如下操作后,数据库启动失败:

sys_resetwal -D /data/kdb_data/data/ -f
sys_ctl -D /data/kdb_data/data/ start

1、查看sys_log日志信息

---如上所示,数据库启动找不到有效的检查点“invaild checkpoint record",启动失败。

2、查看data目录

---如上所示,在data目录下有backup_label文件,此文件一般在执行数据库物理备份时创建,备份成功后会被清理。

3、清理backup_label文件

数据库在线备份开始时,会调用pg_start_backup函数执行一次checkpoint,并生成backup_label文件。当使用在线备份集进行恢复时,backupStartPoint就是上述checkpoint记录对应的LSN,当达到了该LSN,该值置为0,在置为0之前,数据库不能启动。该值被记录在backup_label文件中如下,直到在线备份结束,pg_stop_backup将该文件删除。这样就保证了在备份过程中,数据库崩溃了,可以默认从备份开始时的日志检查点开始恢复。

kingbase@node101 data]$ cat backup_label.old
START WAL LOCATION: 0/4E000028 (file 00000009000000000000004E)
CHECKPOINT LOCATION: 0/4E000088
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2023-06-01 10:56:17 CST
LABEL: repmgr base backup
START TIMELINE: 9

如下图所示,根据sys_log提示,清理backup_label文件:

二、问题解决

 1、在data目录下删除backup_label文件
 2、重新启动数据库实例,启动成功。

三、总结
resetwal可以解决在数据库启动时,出现”invalid checkpoint record“的故障,通过重建checkpoint,启动数据库服务,但是会导致数据库丢失部分事务。使用此操作恢复数据库的场景是,生产可以承受部分数据丢失,但必须启动数据库服务。