[[toc]]
适用范围
当文件系统异常等原因导致pg_control文件丢失或损坏,在没有备份或者其它更合适的处理办法时,可尝试该文档中的方法应急启动数据库。
问题概述
丢失pg_control文件,数据库启动失败,报错如下
$ gs_ctl start -D data2
[2022-06-21 09:16:04.698][4234][][gs_ctl]: gs_ctl started,datadir is /home/omm/data2
[2022-06-21 09:16:04.808][4234][][gs_ctl]: waiting for server to start…
.0 LOG: [Alarm Module]can not read GAUSS_WARNING_TYPE env.
0 LOG: [Alarm Module]Host Name: centos7
0 LOG: [Alarm Module]Host IP: 192.168.56.211
0 LOG: [Alarm Module]Get ENV GS_CLUSTER_NAME failed!
0 LOG: [Alarm Module]Invalid data in AlarmItem file! Read alarm English name failed! line: 52
0 WARNING: failed to open feature control file, please check whether it exists: FileName=gaussdb.version, Errno=2, Errmessage=No such file or directory.
0 WARNING: failed to parse feature control file: gaussdb.version.
0 WARNING: Failed to load the product control file, so gaussdb cannot distinguish product version.
0 LOG: Failed to initialze environment for codegen.
The core dump path is an invalid directory
gaussdb: could not find the database system
Expected to find it in the directory “/home/omm/data2”,
but could not open file “/home/omm/data2/global/pg_control”: No such file or directory
[2022-06-21 09:16:05.811][4234][][gs_ctl]: waitpid 4243 failed, exitstatus is 512, ret is 2
[2022-06-21 09:16:05.811][4234][][gs_ctl]: stopped waiting
[2022-06-21 09:16:05.811][4234][][gs_ctl]: could not start server
问题原因
pg_control是MogDB中非常重要的文件,保存了版本,数据库标识,检查点等重要信息,丢失会导致无法启动。
解决方案
pg_control虽然非常重要,但没有保存用户数据,可以通过重建解决。
-
丢失控制文件可以通过创建空的cluster,复制一个控制文件。
$ gs_initdb -D ./tmpdata --nodename test
$ cp ./tmpdata/global/pg_control $PGDATA/global/ -
使用pg_resetxlog重置控制文件中的重要信息
需要尝试找到以下几个重要信息,如果实在找不到相关信息,冷备份后,可以尝试设置NextXID为一个较大的值,但一定不能小了。
提示:
可以使用mog_xlogdump去pg_xlog下解析最新的xlog,找到一个相对准确的最新的xid,再加上100K作为NextXID
mog_xlogdump 00000001000000000000000D|grep xid|tail -10
$ pg_controldata /home/omm/data2|grep -E “NextXID|NextOID|NextMultiXactId|NextMultiOffset”
Latest checkpoint’s NextXID: 26515
Latest checkpoint’s NextOID: 32778
Latest checkpoint’s NextMultiXactId: 2
Latest checkpoint’s NextMultiOffset: 0
$ pg_resetxlog -o 32778 -x 26515 -m 2 -O 0 $PGDATA
- 起库验证,数据可读,可写
$ gs_ctl start -D $PGDATA
参考文档
无