歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linux shell:mysql bin_log定期清理腳本

linux shell:mysql bin_log定期清理腳本

日期:2017/3/1 12:20:25   编辑:SHELL編程
需求: 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