postgresql – 删除pg_xlog文件后,Postgres将无法启动
使用Debian Wheezy,Postgresql 9.3
我的数据库因为保存WAL文件的分区已满而关闭. 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: 现在我不能删除任何数据库,也不能创建新的数据库,我总是得到一个xlog刷新请求不满意的错误.我已经尝试过运行pg_resetxlog,但似乎没有做任何事情.错误显示的另一件事是无法写入pg_tblspc / 16385 / PG_9.3_201306121 / 36596452/11773的块1,写入错误可能是永久性的. EDIT2:上面的部分问题是11773文件.我已将其重命名为11773.corrupt,现在数据库允许我再次创建和删除. 解决方法
嗯,是的不要那样做.
好吧,你已经损坏了你的数据库.从备份还原.你有备份,对吗?最好是一个方便的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版本中完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |