記一次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記錄數據庫的事務信息,不得隨意刪除更新,做物理備份時要記得備份着兩個日志。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM