暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB丢失pg_control文件应急处理方法

原创 范计杰 2022-09-05
1279

[[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虽然非常重要,但没有保存用户数据,可以通过重建解决。

  1. 丢失控制文件可以通过创建空的cluster,复制一个控制文件。
    $ gs_initdb -D ./tmpdata --nodename test
    $ cp ./tmpdata/global/pg_control $PGDATA/global/

  2. 使用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

  1. 起库验证,数据可读,可写
    $ gs_ctl start -D $PGDATA

参考文档

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论