欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

12组nodes MySQL DB,每组2台Master-Master,批量清除过期的binl_MySQL

程序员文章站 2023-12-29 20:21:34
...
bitsCN.com

12组nodes MySQL DB,每组2台Master-Master,批量清除过期的binlog释放磁盘空间

接到call,磁盘报警了,发现是大量dml操作导致N多binlo*生,所以需要清除已经sync过的binlog日志,12组nodes MySQL DB,每组2台Master-Master,需要批量清除过期的binlog释放磁盘空间。

方案,总共24台db,一台台进去清理肯定不行,得需要写一个脚本,进行批量操作,方案思路大概如下

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脚本如下

[python]

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 status/G;/" |grep -i master_Log_File "`

echo $str_log_files;

log_file=`echo $str_log_files | 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 status/G;/" |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;

OK,run sh脚本

sh clearbinlog.sh 就可以开始清理所有db的binlog了。

最后再次check disk space,执行check_disk.sh脚本,脚本内容如下:

[html]

for masterdb in `master.db.full`;do

ssh $masterdb "df -h" |grep -i mysqldatadir;

done;

执行sh check_disk.sh开始check

bitsCN.com
相关标签: 空间

上一篇:

下一篇: