歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

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/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命令就可以解決這個需求,我目前還在努力向這個方向邁進。
Copyright © Linux教程網 All Rights Reserved