[[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
參考文檔
無




