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

 

 

说明:

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

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

 

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

cd /data
du -sh *

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

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

 

查看配置文件核对目录

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

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

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

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

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

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

 

删除老的归档日志

 

脚本说明:

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

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

 

执行脚本看下效果:

 

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

 

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

 

 

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

上一篇:zabbix自定义监控postgresql死亡元组,shell脚本比较小数位,shell脚本统计时间精确毫秒


下一篇:mysql主从遇到问题