PG数据库如何通过pg_resetwal处理wal日志的误删除

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

PG数据库如何通过pg_resetwal处理wal日志的误删除

一 问题

一个开发环境数据库无法访问,发现存储数据库的挂载点存储使用率达到了100%,导致数据库宕机且无法再启动。追踪发现是pg_wal日志把存储撑爆了,然后就直接rm掉了,直接导致了数据库的启动报错。

二 解决方案

使用pg_resetwal重置wal日志

查看控制文件是否正常

pg_controldata -D $PGDATA



如果控制文件没问题,可以进行重置。

pg_resetwal -D $PGDATA

启动数据库

systemctl start postgresql

检查数据库状态

systemctl status postgresql

注意:这种方式会丢失未做checkpoint的wal数据,丢失数据的多少受checkpoint_timeout参数的影响。

使用pg_resetwal注意项

在命令行中指定数据目录PGDATA

这个命令不能在服务器正在运行时被使用,如果在数据目录中发现一个服务器锁文件,pg_resetwal将拒绝启动。

如果服务器崩溃那么一个锁文件可能会被残留,需先移除锁文件且确认没有服务器进程存活,然后再运行pg_resetwal。

使用pg_resetwal后,数据库可能包含由于部分提交事务产生的不一致数据。应立刻备份数据库,初始化实例后重新恢复数据,检查不一致的数据并修复。

pg_resetwal是服务端工具,不能在客户端运行。

如果pg_resetwal无法通过读取pg_control确定合适的值时,才需要选项-c、-l、-m、-x、-O、-o、-e等参数。具体使用可参考官方指南,实在不行只能使用-f参数。但是恢复的数据库还是值得怀疑,一次立即的备份和重新恢复是势在必行的,在备份之前不要在该数据库中执行任何数据修改操作,因为任何这样的动作都可能使破坏更严重。

使用pg_resetwal官方指南

https://www.postgresql.org/docs/12/app-pgresetwal.html




PG数据库如何通过pg_resetwal处理wal日志的误删除

一 问题一个开发环境数据库无法访问,发现存储数据库的挂载点存储使用率达到了100%,导致数据库宕机且无法再启动。追踪发现是pg_wal日志把...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息