linux shell:mysql bin_log定期清理脚本
时间:2015-12-05 15:32 来源:linux.it.net.cn 作者:IT
需求:
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/Getlog.sql > /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}'
以下给出简略版本,只实现功能:删除指定数据库的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
#动态获取脚本路径
BINPATH=`pwd | 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 < $BINPATH/bin/Getlog.sql > templog.txt
#获取倒数七天的日志名称
BinLog=`tac templog.txt | sed -n 7p | awk -F ' ' '{print $1}'`
echo $Binog $BINPATH/log/clean.log
#拼写清理日志sql,并保存在临时文件
echo "purge binary logs to '$BinLog';" > temp.sql
#执行sql,清理mysql日志
$SQLPARAM < $BINPATH/bin/temp.sql >>$BINPATH/log/clean.log
rm -rf templog.txt
rm -rf temp.sql
#循环读取配置文件内容
done<$BINPATH/etc/clean.conf
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命令就可以解决这个需求,我目前还在努力向这个方向迈进。
(责任编辑:IT)
需求: 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/Getlog.sql > /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}' 以下给出简略版本,只实现功能:删除指定数据库的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 #动态获取脚本路径 BINPATH=`pwd | 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 < $BINPATH/bin/Getlog.sql > templog.txt #获取倒数七天的日志名称 BinLog=`tac templog.txt | sed -n 7p | awk -F ' ' '{print $1}'` echo $Binog $BINPATH/log/clean.log #拼写清理日志sql,并保存在临时文件 echo "purge binary logs to '$BinLog';" > temp.sql #执行sql,清理mysql日志 $SQLPARAM < $BINPATH/bin/temp.sql >>$BINPATH/log/clean.log rm -rf templog.txt rm -rf temp.sql #循环读取配置文件内容 done<$BINPATH/etc/clean.conf 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命令就可以解决这个需求,我目前还在努力向这个方向迈进。 (责任编辑:IT) |