【工具】批量刪除binlog 的指令碼
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 .."
有需要的可以根據自己生產環境的實際情況,適當修改。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-2064931/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- mysql binlog 刪除master- binlogMySqlAST
- 日誌刪除指令碼指令碼
- php(js)批量刪除/單個刪除PHPJS
- 刪除資料庫指令碼資料庫指令碼
- mysql binlog日誌刪除MySql
- 批量刪除死鎖
- oracle批量刪除表Oracle
- hibernate批量刪除
- 表格的批量重新命名與批量刪除
- 實現 UITableViewCell的批量刪除UIView
- 定時刪除檔案指令碼指令碼
- 定期刪除歸檔檔案的指令碼指令碼
- 批量改名的指令碼指令碼
- 批量刪除 redis keysRedis
- git 批量刪除本地分支Git
- 批量刪除容器和映象
- 批量刪除表CHI_%
- 批量刪除空的資料夾
- 批量刪除檔案中的^M
- Linux下find與rm指令結合批量刪除檔案Linux
- 刪除 AP 發票相關指令碼指令碼
- MySQL 正確刪除 binlog 日誌MySql
- 刪除七天以前檔案的指令碼指令碼
- 【shell 指令碼】刪除/var/log 下的日誌指令碼
- 批次刪除指定目錄下的sh指令碼指令碼
- MySQL通過Binlog恢復刪除的表MySql
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- docker 批量刪除容器和映象Docker
- 批量刪除大量小檔案
- hibernateHQl批量插入、刪除、更新
- Linux批量刪除檔案Linux
- oracle 批量刪除觸發器Oracle觸發器
- MySQL批量刪除指定字首表MySql
- SD--批量刪除訂單
- DB2 批量刪除表DB2
- 如何批量刪除指定的GitHub ReposGithub
- 批量刪除dbms_job建立的job