记一次postgresql的归档日志爆仓磁盘处理

 

 

说明:

收到磁盘跑满的问题,登录机器查看数据库磁盘近乎跑满/data

image-20210616171610620

 

查看/data下最大占用目录文件,

cd /data
du -sh *

查看pgwalarchive目录就占用了320G多,顾名思义pgwalarchive就是归档日志。

image-20210616171840438

 

查看配置文件核对目录

查看配置文件,默认在postgresql.conf里面。

image-20210616172031177

archive_command = 'gzip < %p > /data/backup/pgwalarchive/%f.gz && echo %f.gz >> /data/backup/pgwalarchive/archive.list'

归档文件名和目录与/data目录内的文件一致。确定这个是pg_log产生的。

看样子是归档日志一直存放没有定期清理导致持续跑满磁盘。

那删除老的归档日志即可。

 

删除老的归档日志

 

脚本说明:

写个脚本定时检测磁盘大小,删除保存指定多少天数的日志归档即可。

cat clear_bin_log.sh

 

#!/bin/bash
disk_free=$(df -hP | awk '{if($NF == "/data"){gsub(/%/,"",$(NF-1));print $(NF-1)}}')

if [ "$disk_free" -gt 90 ];then
  find /data/backup/pgwalarchive -type f -name '*.gz' | xargs -i rm {}
elif [ "$disk_free" -gt 88 ];then
    find /data/backup/pgwalarchive -type f -name '*.gz' -mtime +3 | xargs -i rm {}
elif [ "$disk_free" -gt 86 ];then
    find /data/backup/pgwalarchive -type f -name '*.gz' -mtime +6 | xargs -i rm {}
elif [ "$disk_free" -gt 80 ];then
    find /data/backup/pgwalarchive -type f -name '*.gz' -mtime +15 | xargs -i rm {}
elif [ "$disk_free" -gt 70 ];then
    find /data/backup/pgwalarchive -type f -name '*.gz' -mtime +20 | xargs -i rm {}
elif [ "$disk_free" -gt 60 ];then
    find /data/backup/pgwalarchive -type f -name '*.gz' -mtime +25 | xargs -i rm {}
fi

 

 

加入定时任务

root@xx-xx-DB-02:/data/backup# crontab -l
00 20 * * * /bin/bash /data/backup/clear_bin_log.sh >/dev/null 2>&1

 

执行脚本看下效果:

 

image-20210616172519290

 

好了,可以了,磁盘释放了,记得切记保留时长以及数据重要性记得核对哦,是否可以删除。

 

补充说明:

pg_log记录各种Error信息,以及服务器与DB的状态信息,可由用户随意更新删除
pg_xlog与pg_clog记录数据库的事务信息,不得随意删除更新,做物理备份时要记得备份着两个日志。

 

 

 

posted @ 2021-06-16 17:33  疯刘小三  阅读(1567)  评论(0编辑  收藏  举报