linux mysql日志清理_linux shell:mysql bin_log定期清理脚本

需求:

1、自动处理mysql bin日志脚本

2、输出可读log

3、保留1周的日志

4、对所有数据库统一处理。

实现过程描述:

思路:两种方式实现

1、mysql目录通过ls获取bin日志目录并通过命令删除。

2、通过mysql命令获取bin日志,并通过命令删除。

相比较来说第二种更加容易实现。

功能语句:

mysql -h192.168.1.2 -uroot -pXXXXX  /home/GC_Tools/housekeeping/mysql_bin_log/bin/templog.txt

以上命令输出格式如下:

mysql-bin.001021        1073742032

mysql-bin.001022        1073742579

mysql-bin.001023        1073742818

mysql-bin.001024        1073741920

mysql-bin.001025        1073741915

mysql-bin.001026        790706635

第一列是日志名称,第二列是日志大小。

以上是截取的一部分内容,我们需要的数据是倒数第七天的日志名称。

通过mysql清理日志的命令去清理它之前的所有日志。

直接获取倒数第七行的数据:

tac templog.txt | sed -n 7p | awk -F ' ' '{print $1}'

5015986.html

以下给出简略版本,只实现功能:删除指定数据库的bin日志,保留七天日志。

#####################################

#!/bin/bash

TIME=`date +%Y%m%d%H%M%S`

BINPATH="/home/GC_Tools/housekeeping/mysql_bin_log"

SQLPARAM="mysql -h192.168.1.6 -uroot -pXXXXX"

echo $TIME "start clean" >> $BINPATH/log/clean.log

$SQLPARAM < $BINPATH/bin/Getlog.sql > templog.txt

BinLog=`tac templog.txt | sed -n 7p | awk -F ' ' '{print $1}'`

echo "Get the log's name is" \"$BinLog\" >>$BINPATH/log/clean.log

echo "purge binary logs to '$BinLog';" > temp.sql

$SQLPARAM < $BINPATH/bin/temp.sql >> $BINPATH/log/clean.log

#############################################

简略版本完成,功能测试正常。

接下来需要实现功能:

1、部署路径不要求,自适应。

2、读取数据库IP配置文件,并循环处理。

完整版本:

#!/bin/bash

#动态获取脚本路径

DIR="$( cd "$( dirname "$0"  )" && pwd  )"

BINPATH=`echo $DIR | sed -e 's/\/bin//'`

#获取当前系统时间

TIME=`date +%Y%m%d%H%M%S`

#while do 循环处理配置文件

while read LINE

do

#输出日志

echo $TIME >>$BINPATH/log/clean.log

echo $LINE >>$BINPATH/log/clean.log

#获取数据库ip

CHOST=`echo $LINE | awk -F ':' '{print $2}'`

#拼写数据库连接sql

SQLPARAM="mysql -h$CHOST -uroot -pXXXXX"

#查询当前连接数据库的日志信息列表

$SQLPARAM < $DIR/Getlog.sql > $DIR/templog.txt

#获取倒数七天的日志名称

BinLog=`tac $DIR/templog.txt | sed -n 7p | awk -F ' ' '{print $1}'`

#拼写清理日志sql,并保存在临时文件

echo "purge binary logs to '$BinLog';" > $DIR/temp.sql

#执行sql,清理mysql日志

$SQLPARAM < $DIR/temp.sql >>$BINPATH/log/clean.log

rm -rf $DIR/templog.txt

rm -rf $DIR/temp.sql

#循环读取配置文件内容

done

ps:配置文件实例

clean.conf

DB2:192.168.1.3

DB4:192.168.1.4

DB5:192.168.1.5

DB6:192.168.1.6

再再PS:

程序功能说明:

定期(每周六晚)清理mysql的binlog,保留七天的日志,其余日志删除。

使用说明:

1、只需要在/etc配置文件内配置数据库名称与IP即可,不需要增加其他配置。

2、脚本本身没有检测数据库是否连接正常的功能,默认连接正常,如果数据库异常最好不要配置,不然会连接超时。

PS:写完之后发现,mysql其实有相应的配置项可以设置binlog的数量,汗颜....,不过脚本的功能和逻辑是想通的,也不算是完全没有价值和收获,当然有些大神直接一行shell命令就可以解决这个需求,我目前还在努力向这个方向迈进。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值