收到磁盤跑滿的問題,登錄機器查看數據庫磁盤近乎跑滿/data
查看/data下最大占用目錄文件,
cd /data
du -sh *
查看pgwalarchive目錄就占用了320G多,顧名思義pgwalarchive就是歸檔日志。
查看配置文件核對目錄
查看配置文件,默認在postgresql.conf里面。
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
執行腳本看下效果:
好了,可以了,磁盤釋放了,記得切記保留時長以及數據重要性記得核對哦,是否可以刪除。
補充說明:
pg_log記錄各種Error信息,以及服務器與DB的狀態信息,可由用戶隨意更新刪除
pg_xlog與pg_clog記錄數據庫的事務信息,不得隨意刪除更新,做物理備份時要記得備份着兩個日志。
[
參考鏈接] https://www.cnblogs.com/mingfan/p/14038680.html