我的数据库因为保存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版本中完成.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。