问题描述:
大量dml操作导致N多binlog产生,需要清除已sync过的binlog日志,12组nodes mysql DB,每组2台Master-Master,需要批量清除过期的binlog释放磁盘空间。
创建一个shell/ target=_blank class=infotextkey>shell脚本,进行批量清除操作,方案思路大概如下:
1,建立双master列表masterlist; 一个master一行。
2,远程获取master db上面的binlog位置以及对应master的master主机名(也许是IP地址)
3,拿到binlog位置以及master主机名,然后ssh远程清理掉远程master上面的binlog
4,采用shell for循环操作step 2以及step 3。
clearbinlog.sh脚本:
复制代码 代码示例:
#!/bin/bash
#
#site:www.jb200.com
for masterdb in `cat master.db.full`;do
#1 echo get the binlog position infomation
str_log_files=`ssh $masterdb "/opt/mysql/product/5.5.25a/bin/mysql -uroot --password="" -e "show slave statusG;" |grep -i master_Log_File "`
echo $str_log_files;
log_file=`echo $str_log_files |
linuxjishu/13830.html target=_blank class=infotextkey>awk '{print $2}'`;
echo $log_file;
#2 echo get the master ip address or master
hostname
db01tmp=`ssh $masterdb " /opt/mysql/product/5.5.25a/bin/mysql -uroot --password="" -e "show slave statusG;" |grep -i Master_Host "`;
db01=`echo $db01tmp | awk '{print $2}'`
#3 begin to clear the old binlog
ssh $db01 "/opt/mysql/product/5.5.25a/bin/mysql -uroot --password="" -e "purge master logs to '$log_file';""
#4 check the disk space for master
ssh $db01 "df -h"
echo " "
echo " -- -- -- ";
done;
运行sh脚本:
sh clearbinlog.sh
开始清理所有db的binlog。
最后,再次check disk space,执行check_disk.sh脚本。
脚本内容:
复制代码 代码示例:
for masterdb in `master.db.full`;do
ssh $masterdb "df -h" |grep -i mysqldatadir;
done;
执行sh check_disk.sh开始check检测。
猜你喜欢:
清理多台Mysql数据库的过期binlog日志的shell脚本
mysql binlog 自动清理脚本
批量清除128组节点db上过期的binlog释放磁盘空间的shell脚本