加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:02:42 所属栏目:百科 来源:网络整理
导读:使用Debian Wheezy,Postgresql 9.3 我的数据库因为保存WAL文件的分区已满而关闭. 所以,我删除了./pg_xlog/里面的所有内容,因为我不知道它们是什么(是的,我非常愚蠢).根据syslog,现在Postgres服务无法启动,不过问题是: 00000: could not open tablespace dir
使用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

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

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

现在我不能删除任何数据库,也不能创建新的数据库,我总是得到一个xlog刷新请求不满意的错误.我已经尝试过运行pg_resetxlog,但似乎没有做任何事情.错误显示的另一件事是无法写入pg_tblspc / 16385 / PG_9.3_201306121 / 36596452/11773的块1,写入错误可能是永久性的.

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

解决方法

Postgres won’t start after deleting pg_xlog files

嗯,是的不要那样做.

What can I do to make the service start again?

好吧,你已经损坏了你的数据库.从备份还原.你有备份,对吗?最好是一个方便的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版本中完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读