MySQL DBA 偶爾會(huì)遇到因?yàn)榭臻g不足,在不能刪除data之前,可能先想到的是通過(guò)刪除binlog 暫時(shí)解決空間問(wèn)題。周末本人也遇到這樣的情況,因?yàn)椴辉陔娔X旁邊,找領(lǐng)導(dǎo)出馬并且使用手機(jī)把命令打出發(fā)給老板去刪除binlog。想想還是寫(xiě)一個(gè)binlog 刪除工具吧,以后遇到此類(lèi)問(wèn)題,直接使用腳本工具合適。
delbinlog.sh #!/bin/bash ##author yangyi@youzan.com #date 20160327 #delnums 是每次刪除多少個(gè),分批次刪除。 #rest_num是要保留多少個(gè)binlog ,可以根據(jù)實(shí)際情況調(diào)整。 if [ $# -lt 4 ];then echo "Usage: $0 -p PORT -r res_nums" exit 1 fi while getopts ":p:r:" arg do case $arg in p) #echo "p's arg:$OPTARG" PORT=$OPTARG ;; r) #echo "d's arg:$OPTARG" res_nums=$OPTARG ;; ?) #當(dāng)有不認(rèn)識(shí)的選項(xiàng)的時(shí)候arg為? echo "unkonw argument" echo "Usage: $0 -p PORT -r res_nums" exit 1 ;; esac done if [ -S /srv/my_$PORT/mysqld.sock ]; then SOCKET="/srv/my_$PORT/mysqld.sock" elif [ -S /srv/my$PORT/run/mysql.sock ]; then SOCKET="/srv/my$PORT/run/mysql.sock" fi MYSQL="mysql -uroot -S ${SOCKET} " del_nums=3 logs_num=`$MYSQL -e "show master logs;" | wc -l ` echo "there are $logs_num binary logs .." if [[ $res_nums -gt $logs_num ]]; then exit 0 fi while [[ $res_nums -lt $logs_num ]]; do del_to_binlog=`$MYSQL --skip-column-names -e "show master logs;" | head -n $del_nums | awk 'END {print $1}'` $MYSQL -e "purge master logs to '$del_to_binlog' ;" echo "purge master logs to $del_to_binlog ... " logs_num=`$MYSQL --skip-column-names -e "show master logs;" | wc -l ` sleep 2 done logs_num=`$MYSQL -e "show master logs;" | wc -l ` echo "there are $logs_num binary logs .."