Shell脚本定时清理Postgres数据库中历史数据

来源:互联网 发布:大数据世界小说txt 编辑:程序博客网 时间:2024/05/16 04:42

Shell脚本定时清理Postgres数据库中历史数据

在系统日常运行中,会产生大量的日志,日志表会越来越加庞大。特别是对于云服务器使用者来说,每一块的空间都是很宝贵的。所以定时清理掉无用的历史日志,就显得很有意义了。其实实现数据库的日志清楚,有很多方法,最简单的就是配置一个数据库定时任务,定时删除旧数据就行。但是数据库定时器缺乏灵活性,如果需要修改时间节点。就需要重新修改编译定时器,对于维护人员来说,可操作性不强。本文主要介绍使用shell脚本读取配置文件,通过cronjob来实现。

  • 配置postgres无密码登陆

  • 编写配置文件

  • 编写shell脚本


配置postgres无密码登陆

如果用psql命令直接登陆,会提示输入密码(psql并没有提供-password选项),就使得整个过程必须要人操作才能继续)。所以需要配置postgres无密码登陆

有多种方法可以实现postgres无密码登陆,这里采用应用比较广泛,官方推荐的使用密码文件.pgpass无密码登陆方式。

操作步骤:
1.cd ~
2.vi .pgpass,并加入需要登录的服务器的信息,格式:地址:端口:用户名:密码
3.保存退出,添加权限 chmod 0600 ~/.pgpass。可用命令ls -al |grep .pgpass查看配置的权限
4.使用【psql -h 地址 -p 端口 -U 用户名】登录
5.我的配置:127.0.0.1:5432:kddi_bs:kddi_bs:kddibs

官方参考资料https://www.postgresql.org/docs/current/static/libpq-pgpass.html,英文好的同学可以自行参考。

编写配置文件

这里就比较简单,贴上我的配置

dbdate=180     #设置数据库清除天数filedate=180   #设置日志文件清除天数

编写shell脚本

这里就是本文的核心重点,先贴出代码,在代码里面有注释

#!/bin/sh#取出配置文件中配置的时间节点ndate=`sed '/^dbdate=/!d;s/.*=//' dbinfo.conf`#计算出时间字符串datestr=`date -d "-$ndate day" +%Y%m%d%H%M%S`#编写sql语句delsql="DELETE FROM kddi_communication_filed_logs where time<'$datestr'"#执行sql语句result=`psql -h 127.0.0.1 -p 5432 -U kddi_bs --command "$delsql"`currtime=`date +"%Y%m%d%H%M%S"`deletelog="./deletelog.log"#记录操作到日志文件echo "'$currtime' -[success] clear table kddi_communication_filed_logs old data , '$result'">>$deletelogdellogssql="DELETE FROM kddi_bs_filed_logs where time<'$datestr'"logresult=`psql -h 127.0.0.1 -p 5432 -U kddi_bs --command "$dellogssql"`echo "'$currtime' -[success] clear table  kddi_bs_filed_logs old data , '$logresult'">>$deletelog
原创粉丝点击