在GPDB运维过程中,有时会发生节点错误,一般采用gprecoverseg 进行节点的恢复,如果不能恢复,会尝试使用gprecoverseg -F进行全量恢复,一般在这个环节问题可以解决。但是个别情况下,会报出Unable to connect to database的错误,这个时候就需要特别处理了。
错误信息:报错信息为Unable to connect to database. Retrying 1
gprecoverseg failed. (Reason=’Unable to connect to database and start transaction’) exiting…
一般在retry5次后,会自动退出。
解决办法:发现其实出现这个问题只需要修改pg_changetracking下的CT_METADATA,或者说从其他正常的主事例上拷贝一份到出问题的主事例上即可。
下面说说分析和解决的具体步骤:
gpstate -s 去查看具体信息,可以发现一个主节点down了,一个mirror切换为主了。
注意这个时候使用 gprecoverseg -F -v去显示恢复的详细信息
[gpadmin@gpmaster ~]$ gprecoverseg -F -v
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[INFO]:-Starting gprecoverseg with args: -F -v
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Checking if MASTER_DATA_DIRECTORY env variable is set.
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Obtaining master's port from master data directory
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Read from postgresql.conf port=5432
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Read from postgresql.conf max_connections=200
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Checking if GPHOME env variable is set.
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.4.1 build 2'
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[DEBUG]:-Connecting to dbname=template1
20150727:22:51:32:003078 gprecoverseg:gpmaster:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.