shell脚本定时清理PostgreSQL数据库中历史数据

时间:2021-9-14     作者:smarteng     分类: 数据库相关


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

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

  • 配置PostgreSQL无密码登陆
  • 编写配置文件
  • 编写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 ,英文好的同学可以自行参考。

第二种无密码登录方法

采用export
export PGPASSWORD=pass1234

本例中我们使用了第二种无密码登录方式

编写配置文件

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

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

编写shell脚本

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

#!/bin/sh

#取出配置文件中配置的时间节点
ndate=`sed '/^dbdate=/!d;s/.*=//' dbinfo.conf`
export PGPASSWORD=pass1234
#计算出时间字符串
datestr=`date -d "-$ndate day" +%Y%m%d%H%M%S`
#编写sql语句
delsql="DELETE FROM communication_filed_logs where time<'$datestr'"
#执行sql语句
result=`psql -h 127.0.0.1 -p 5432 -U bs --command "$delsql"`

currtime=`date +"%Y%m%d%H%M%S"`
deletelog="./deletelog.log"
#记录操作到日志文件
echo "'$currtime' -[success] clear table communication_filed_logs old data , '$result'">>$deletelog

dellogssql="DELETE FROM bs_filed_logs where time<'$datestr'"
logresult=`psql -h 127.0.0.1 -p 5432 -U bs --command "$dellogssql"`
echo "'$currtime' -[success] clear table  bs_filed_logs old data , '$logresult'">>$deletelog
标签: 无密码