【工具】批量删除binlog 的脚本
短信预约 -IT技能 免费直播动态提醒
MySQL DBA 偶尔会遇到因为空间不足,在不能删除data之前,可能先想到的是通过删除binlog 暂时解决空间问题。周末本人也遇到这样的情况,因为不在电脑旁边,找领导出马并且使用手机把命令打出发给老板去删除binlog。想想还是写一个binlog 删除工具吧,以后遇到此类问题,直接使用脚本工具合适。
delbinlog.sh
#!/bin/bash
##author yangyi@youzan.com
#date 20160327
#delnums 是每次删除多少个,分批次删除。
#rest_num是要保留多少个binlog ,可以根据实际情况调整。
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
;;
?) #当有不认识的选项的时候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 .."
有需要的可以根据自己生产环境的实际情况,适当修改。
delbinlog.sh
#!/bin/bash
##author yangyi@youzan.com
#date 20160327
#delnums 是每次删除多少个,分批次删除。
#rest_num是要保留多少个binlog ,可以根据实际情况调整。
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
;;
?) #当有不认识的选项的时候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 .."
有需要的可以根据自己生产环境的实际情况,适当修改。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341