删除pg_xlog文件后,Postgres将无法启动

Art*_*hur 5 postgresql postgresql-9.3

使用Debian Wheezy,Postgresql 9.3

我的数据库因为保存WAL文件的分区已满而关闭.所以,我删除了里面的一切./pg_xlog/,因为我不知道它们是什么(是的,我非常愚蠢).根据syslog,现在Postgres服务无法启动,不过问题是:

00000: could not open tablespace directory "pg_tblspc/16386/PG_9.3_201306121": File or directory not found
LOCAL:  RelationCacheInitFileRemoveInDir, relcache.c:4895
00000: Primary checkpoint record is invalid
LOCAL:  ReadCheckpointRecord, xlog.c:6543
00000: Secondary checkpoint record is invalid
LOCAL:  ReadCheckpointRecord, xlog.c:6547
PANIC: XX000: could not locate a valid checkpoint record
LOCAL:  StartupXLOG, xlog.c:5228
Run Code Online (Sandbox Code Playgroud)

我不完全确定问题是它找不到合适的pg_tblspc或完全没有检查点WAL文件.存储数据库的实际路径是/dados/PG_9.3_201306121.我该怎么做才能重新开始服务?

编辑1: 好的,我已经设法让这件事重新上线了.有些数据库损坏了.我已经成功了DROPDB两个(如果没有他们强制服务重启,甚至无法连接到他们).我试着去另一个腐败的,但错误再次与xlog有关.我试过对它进行干净的恢复,但恢复不完整.然后,我创建了一个新数据库,并尝试恢复该数据库的旧备份.它也不完整.

现在我不能删除任何数据库,也不能创建新数据库,我总是会收到xlog flush request not satisfied错误.我试过跑步pg_resetxlog,但它似乎没有做任何事情.错误显示的另一件事是cannot write to block 1 of pg_tblspc/16385/PG_9.3_201306121/36596452/11773,write error may be permanent.

EDIT2:上面的部分问题是11773文件.我已将其重命名为11773.corrupt,现在数据库允许我再次创建和删除.

Cra*_*ger 6

删除pg_xlog文件后,Postgres将无法启动

嗯,是的 不要那样做.

我该怎么做才能重新开始服务?

好吧,你已经损坏了你的数据库.从备份还原.你有备份,对吗?最好是一个方便的PITR档案,如PgBarman,你可以在5分钟前恢复.没有?

好的,首先,归档损坏的副本.https://wiki.postgresql.org/wiki/Corruption

现在.如果你很幸运,pg_resetxlog会让你运行得足以成功完成一个pg_dump数据库,这样你就可以将旧的受损安装的datadir移到一边,initdb一个新的数据库,然后将数据库恢复到它.

如果你不幸pg_dump不会成功,或者由于重复的主键之类的东西你会得到恢复失败.在后一种情况下,可能需要手动修复转储.如果pg_dump失败,适当的行动将取决于它失败的原因.

是的.不要删除pg_xlog.

PostgreSQL社区内部正在讨论重命名pg_xlog的事情,这使得它更加明显地表明它是数据库的一个重要组成部分,并且希望它能在9.7版本中完成.