MySQL DBA 偶爾會(huì)遇到因?yàn)榭臻g不足,在不能刪除data之前,可能先想到的是通過刪除binlog 暫時(shí)解決空間問題。周末本人也遇到這樣的情況,因?yàn)椴辉陔娔X旁邊,找領(lǐng)導(dǎo)出馬并且使用手機(jī)把命令打出發(fā)給老板去刪除binlog。想想還是寫一個(gè)binlog 刪除工具吧,以后遇到此類問題,直接使用腳本工具合適。
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 .."
有需要的可以根據(jù)自己生產(chǎn)環(huán)境的實(shí)際情況,適當(dāng)修改。
當(dāng)前標(biāo)題:【工具】批量刪除binlog的腳本
URL鏈接:
http://weahome.cn/article/ggjjci.html