zl程序教程

您现在的位置是:首页 >  其他

当前栏目

批量清除128组节点db上面过期的binlog释放磁盘空间实现思路

批量节点思路 实现 过期 清除 释放 DB
2023-06-13 09:15:01 时间
如果10台以内的db的话,自己手动ssh进去,clean就足以,但是上百台呢,就要写脚本了。大概思路:在一台db跳转机上面,写一个脚本,访问slave,远程获取正在复制的master上面的binlog位置,然后再远程去purgemaster上面的binlog.

1,建立slavedbserver列表slavelist;一个slave一行。
2,远程获取slavedb上面的binlog位置以及slave的master主机名(也许是ip地址)
3,拿到binlog位置以及master主机名,然后ssh远程清理掉master上面的binlog
4,shellfor循环操作step2以及step3。
附带脚本1:clean_binlog.sh
复制代码代码如下:

#!/bin/bash
#p1theslavemysqldbserver
db03=$1
echo$dbserver;
ster_Log_File=`ssh$db03"mysql-uxx-pxx--ssl-ca=/opt/mysql/ssl/ca-cert.pem--s
sl-cert=/opt/mysql/ssl/server-cert.pem--ssl-key=/opt/mysql/ssl/server-key.pem-e\"showslavestatus\G;\"|grep-imaster_Log_File
"`;
#echo#####获取binlog信息
log_file=`echo$ster_Log_File|awk"{print$2}"`;
db01tmp=`ssh$db03"mysql-uxx-pxx--ssl-ca=/opt/mysql/ssl/ca-cert.pem--s
sl-cert=/opt/mysql/ssl/server-cert.pem--ssl-key=/opt/mysql/ssl/server-key.pem-e\"showslavestatus\G;\"|grep-iMaster_Host
"`;

复制代码代码如下:

#获取master主机名或者ip地址
db01=`echo$db01tmp|awk"{print$2}"`
#开始清理binlog日志信息

复制代码代码如下:
ssh$db01"mysql-uxxx-pxx--ssl-ca=/opt/mysql/ssl/ca-cert.pem--ssl-cert=/op
t/mysql/ssl/server-cert.pem--ssl-key=/opt/mysql/ssl/server-key.pem-e\"purgemasterlogsto"$log_file";\""
#checkmaster上面的binlog信息

复制代码代码如下:
ssh$db01"df-h/mysql/binlog";

复制代码代码如下:
<STRONG><SPANstyle="COLOR:#ff0000"></SPAN></STRONG>  

附带批量for循环脚本2:
forsin`catslavelist`;doshclean_binlog.sh$s;done
这个是比较粗略的方案,肯定有不足之处,我的128组是mm组合,所以这样操作是可以的,架构不同估计会有变动,这里还涉及到purge之前的binlog的备份等等(有专门的备份机以及备份脚本)。