linux系统日志的备份和定时清除

本文介绍了一个用于备份Linux系统日志文件的Shell脚本。该脚本能够定期备份/var/log/wtmp、/var/run/utmp及/var/log/messages等关键日志文件,并将它们压缩存档到指定目录下。此外,脚本还包含了清理过期备份的功能,确保系统资源的有效利用。

参考网页:http://reeddeer.blog.163.com/blog/static/11817104020128255434163/

脚本内容如下:

#!/bin/sh

# function:backup system log files
# name:sysbaklog.sh
# author:defang.zhang
# date:02/28/2013
# version:1.0

# 说明:备份系统的日志文件
# 1.备份/var/log/wtmp
# 2.备份/var/run/utmp
# 3.备份/var/log/messages

# 待补充...

# 参数说明
basedir=/usr/sysbaklog                                   #备份总存放处
BakDir=/usr/sysbaklog/sysbaklog$(date +'%Y%m%d')         #备份存放处,根据日期生成
bak_utmp=$BakDir/bak_utmp                                #备份utmp
bak_syslog=$BakDir/bak_syslog                            #备份系统日志/var/log

#旧文件
oldFile=/usr/sysbaklog/sysbaklog$(date +%y%m%d --date='2 days ago').tar.gz

# 建备份目录
func_MkdirS()
{
 [ ! -d "$basedir" ] && mkdir $basedir
 [ ! -d "$BakDir" ] && mkdir $BakDir
 for dirs in $bak_utmp $bak_syslog ;do
     [ ! -d "$dirs" ] && mkdir -p $dirs
 done
}


# 通用备份
func_CommBackUp()
{
 cp /var/run/utmp $bak_utmp
 cp -a /var/log $bak_syslog
}

#清除备份只保留七天的
func_clearlog(){
 if [  -f $oldFile ];then
  rm -f $oldFile > /dev/null 2>&1
 fi
}

# 执行主函数
func_main()
{
 func_MkdirS
 func_CommBackUp
 cd $(dirname $BakDir)
 tar -zcvf $(basename $BakDir).tar.gz $(basename $BakDir) >/dev/null
 if [ $? -eq 0 ];then
    rm -rf $(basename $BakDir)
   # mv $(basename $BakDir).tar.gz $basedir
 fi
 func_clearlog()
}
func_main


Linux系统中,可对不同对象进行定时备份,以下是几种常见的定时备份方法: ### 定时备份MySQL数据库 #### 方法一 创建`backmysql.sh`脚本,示例如下: ```bash #!/bin/bash #备份路径 BACKUP=/home/backup/mysql #当前时间 DATETIME=$(date +%Y-%m-%d) echo "===备份开始===" #后台系统数据库 DATABASE=wechat #数据库地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=xydtech #创建备份目录 [ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME" echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql" #mysqldump -u${DB_USER} -p${DB_PW} --single-transaction --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql mysqldump -h localhost -u${DB_USER} -p${DB_PW} ${DATABASE} >${BACKUP}/$DATETIME/$DATABASE-$DATETIME.sql echo "===导出成功,开始传输===" #压缩成tar.gz包 cd $BACKUP tar -zcvf $DATETIME.tar.gz $DATETIME #备份到服务器B #scp $DATABASE-$DATETIME.sql root@1.1.1.2:/home/backup/mysql #删除备份目录 rm -rf ${BACKUP}/$DATETIME #删除10天(不含)前备份的数据,这边可以自行更改 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "===数据库备份到服务器成功===" ``` #### 方法二 修改数据库地址、备份文件夹地址等信息后,使用以下脚本: ```bash #!/bin/bash # MySQL Server 登录信息 MYUSER="数据库账号" MYPASS='数据库密码' MYHOST="数据库IP" MYPORT="数据库端口" MYDB="需要备份的数据库" # 备份相关配置信息 BAKDIR="/www/wwwroot/mysqlbackup/$(date +'%Y-%m-%d')" # 备份保存目录(根据实际项目路径设置) BAKFILE="$BAKDIR/db.$(date +'%Y-%m-%d-%H%M%S').sql.gz" # 备份文件名(可以不改) KEEPDAYS=7 # 保留天数 # 创建备份目录 if [ ! -d "$BAKDIR" ]; then mkdir -p "$BAKDIR" fi # 备份数据库至压缩文件 mysqldump -h "$MYHOST" -P "$MYPORT" -u "$MYUSER" -p"$MYPASS" --databases "$MYDB" | gzip > "$BAKFILE" # 清理旧备份文件,只保留指定天数内的备份,超过时间的就会被清除 find "$BAKDIR" -name '*.sql.gz' -type f -mtime +"$KEEPDAYS" -delete ``` #### 方法三 使用以下脚本,需注意修改账号、密码等信息: ```bash #!/bin/bash /xp/server/mysql/bin/mysqldump -u你的账号 -p你的密码 你的数据库 | gzip > /home/backup/前缀_$(date +%Y%m%d_%H%M%S).sql.gz ``` ### 定时备份系统日志 若不想覆盖原文件,可进行日期动态备份。创建脚本(如`aaaa.sh`)内容如下: ```bash #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH dong_audit=`date +"audit_%Y_%m_%d_%H_%M_%S.log"` scp /var/log/audit/audit.log root@131.0.63.107:/root/log/131063168/$dong_audit dong_open_euler=`date +"openEuler-security_%Y_%m_%d_%H_%M_%S.log"` scp /var/log/openEuler-security.log root@131.0.63.107:/root/log/131063168/$dong_open_euler dong_systemtap=`date +"systemtap_%Y_%m_%d_%H_%M_%S.log"` scp /var/log/systemtap.log root@131.0.63.107:/root/log/131063168/$dong_systemtap dong_cron=`date +"cron_%Y_%m_%d_%H_%M_%S.log"` scp /var/log/cron root@131.0.63.107:/root/log/131063168/$dong_cron dong_messages=`date +"messages_%Y_%m_%d_%H_%M_%S.log"` scp /var/log/messages root@131.0.63.107:/root/log/131063168/$dong_messages ``` 开启定时任务,执行`crontab -e`,添加以下内容,实现每天凌晨一点半执行备份: ``` 30 1 * * * sh /aaaa.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值