暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG清理wal日志导致的数据丢失

IT那活儿 2024-01-04
358

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  




问题现象



有一次收到告警显示数据库无法连接。连上库后检查发现是因为磁盘目录爆满导致数据库被终止,查看了目录中wal日志占用了大量空间,通过清理后起库恢复业务。下面是模拟操作。




模拟操作



数据准备:

磁盘准备:
添加数据使磁盘填满:
insert into test.t2 select * from test.t1;
过了一会后,报错显示磁盘无剩余空间了。
查看磁盘确实没有空间了。
检查目录下的文件后发现wal占用了4.7G,可以进行清理后起库恢复业务。
此时查看数据库也已经挂了。
通过pg_archivecleanup清理wal日志:
pg_archivecleanup /postgresql/pgdata/pg_wal 000000010000000E00000004
清理完后启动数据库,发现无法启动:
pg_ctl start
查看日志发现是因为需要的wal日志被删除了。
此时只能使用pg_resetwal进行恢复数据库了:
pg_resetwal -f postgresql/pgdata
再次启动数据库就可以了。
检查数据,发现insert的数据未成功:
总 结:
一定要做好监控,可以提前处理很多异常问题。
在数据目录爆满的情况下,删除数据一定要小心,如果需要通过清理wal日志来临时解决问题,则需要通过pg_controldata查看最后的检查点位置来进行清理,不然像本例中直接删除,可能会删除检查点之后的wal日志,那样数据库无法正常开启,会有丢失数据的风险。

END



本文作者:朱谊顺(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论