使用背景

线上物理备份任务是在从库上进行的,xtrabackup会在备份binlog的时候执行flush logs,relay-log会rotate到新的一个文件号,导致sql thread线程应用完之后无法自动删除

这时候就可以引入purge_relay_logs做成执行计划自动清理relay log

安装

yum install -y  mha4mysql-node-0.56-0.el6.noarch

需要的权限

RELOAD, SUPER

使用

#Ansible:  purge mysql relay log from mha node
* */ * * * /usr/bin/purge_relay_logs --disable_relay_log_purge --user=purge_relay --password='' --port= --host=127.0.0.1 &>/tmp/mysql_purge_relay.log

可以通过ansible批量对已有的从库加一下

思路就是先获取所有的从库元数据到列表对象中,然后遍历更新inventory及调用写好的playbook,主脚本如

cat mysql_purge_relay.py
# -*_ coding: utf-8 -*-
import json
import os f = 'port_ip_role'
inf = open(f, 'r')
port_ip_role=json.load(inf)
#port_ip_role={"6666,10.1.1.1": "Slave","6667,10.1.1.2": "Slave"} for k,v in port_ip_role.items():
if v=='Slave':
port_ip=k.split(',')
port,ip =port_ip[0],port_ip[1]
os.system('echo "[slave_host]\n{0}">inventory.cfg'.format(ip))
ansible_cmd='ansible-playbook main.yaml --extra-vars="port={0} slave_host={1}"'.format(port,ip)
print ansible_cmd
os.system(ansible_cmd)

main.yaml

- hosts: slave_host
remote_user: root
vars:
vars_files:
- vars.yaml
roles:
- { role: purge_relay, tags: purge_relay }

purge_relay/tasks/main.yaml

- name: check if install
shell: which purge_relay_logs
register: status
ignore_errors: yes - name: check if exists /usr/bin/purge_relay_logs
shell: ls /usr/bin/purge_relay_logs
register: pstatus
ignore_errors: yes - name: check if cron on port
shell: crontab -l|grep purge_relay_logs|grep {{port}}
register: cronstatus
ignore_errors: yes - name: make soft link if not exists /usr/bin/purge_relay_logs
shell: ln -s `which purge_relay_logs` /usr/bin/purge_relay_logs
when: "{{ status.rc }} == 0 and {{ pstatus.rc }} !=0" - name: install mha4mysql-node-0.56 远程yum安装
yum: name=https://raw.githubusercontent.com/yyueshui/mysql-master-ha-rpm/master/mha4mysql-node-0.56-0.el6.noarch.rpm
when: "{{ status.rc }} != 0" - name: purge mysql relay log cronjob
cron: hour="*/2"
name="{{port}} purge mysql relay log from mha node"
user="root"
job="/usr/bin/purge_relay_logs --disable_relay_log_purge --user={{purge_relay_user}} --password='{{purge_relay_password}}' --port={{port}} --host=127.0.0.1 &>/tmp/mysql_purge_relay.log"
#when: "{{ cronstatus.rc }} != 0" #- name: Removes job from crontab
# cron:
# name: "purge mysql relay log from mha node"
# state: absent
# when: "{{ status.rc }} == 0"

补充

如果在运行purge_relay_logs 报错为

-- ::: purge_relay_logs script started.
install_driver(mysql) failed: Can't load '/usr/local/lib64/perl5/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.18: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 200.
at (eval ) line
Compilation failed in require at (eval ) line .
Perhaps a required shared library or dll isn't installed where expected
at /usr/bin/purge_relay_logs line

解决方法为

ln -s /home/mysql/mysql/lib/libmysqlclient.so. /usr/lib64/

注:由于Mariadb 和mysql的参数有些出入,所以在Mariadb上执行会报参数不存在的错误,可以自行修改perl脚本修正

通过 purge_relay_logs 自动清理relaylog的更多相关文章

  1. wordpress自动清理评论回收站

    有时wordpress的垃圾评论实在让人心烦,杂草难除根,footprint吹又生.如果你有心情的话会一个个把垃圾评论放入回收站,但是时间一长,回收站里的东西越堆越多,你可以点击回收站,然后再点一下e ...

  2. 自动清理SQLServerErrorLog错误日志避免太大

    问题描述:开启SQLServer自动备份后,备份文件越来越多,有没有及时清理,导致服务器空间不足,备份出错,以至于出现几个G的ErrorLog文件,影响系统的登录管理. 解决办法:定期清理SQLSer ...

  3. Tomcat8.5.24日志自动清理(maxDays)功能探究

    前言 测试人员反馈tomcat目录下的日志占用空间很大,需要自动清理.接到这个反馈时,想象着应该是一个很简单的功能,tomcat应该已经实现了日志的自动清理功能.于是乎,我先到网上查询了如何自动清除t ...

  4. hive 中间会话临时文件自动清理脚本

    hive在运行过程中,我们经常会发现 hdfs /tmp/hive/hive or hdfs 目录占用空间巨大,我这里已经清理过了所以,相对较小.但是初次使用hive的用户,一定会发现 随着时间的推移 ...

  5. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  6. CentOS7的/tmp目录自动清理规则

    CentOS6以下系统(含)使用watchtmp + cron来实现定时清理临时文件的效果,这点在CentOS7发生了变化. 在CentOS7下,系统使用systemd管理易变与临时文件,与之相关的系 ...

  7. 自动清理MySQL binlog日志

    开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理b ...

  8. zookeeper3.4.6配置实现自动清理日志

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  9. IIS日志自动清理

    IIS在运行的过程中日志会不停地增长,若iis的网站被频繁的调用或不当的调用,则会产生很多日志.我在系统运维的时候曾出现过20G的系统盘,由于合作商开发的程序有问题,每几百微秒调用一次web服务,短期 ...

随机推荐

  1. 流媒体 5——MPEG声音

    1. 听觉系统的感知特性: MPEG声音的数据压缩和编码不是依据波形本身的相关性和模拟人的发音器官的特性,而是利用人的听觉系统的特性来达到压缩声音数据的目的,这种压缩编码称为感知声音编码. 许多科学工 ...

  2. 关于ffmpeg(libav)解码视频最后丢帧的问题

    其实最初不是为了解决这个问题而来的,是Peter兄给我的提示解决另一个问题却让我误打误撞解决了另外一个问题之后也把这个隐藏了很久的bug找到(之前总是有一些特别短的视频产生不知所措还以为是视频素材本身 ...

  3. 远程链接mongoDB robomongo

    墙裂推荐一个软件robomongo 下载地址:https://robomongo.org/download 最初不用这个软件的时候需要shell链接mongoDB,折腾了半天结果版本不匹配 用robo ...

  4. 【洛谷3950】部落冲突(LCT维护连通性)

    点此看题面 大致题意: 给你一棵树,\(3\)种操作:连一条边,删一条边,询问两点是否联通. \(LCT\)维护连通性 有一道类似的题目:[BZOJ2049][SDOI2008] Cave 洞穴勘测. ...

  5. python_21_copy

    import copy person=['name',['saving',100]] #3种浅copy方式 p1=copy.copy(person) p2=person[:] p3=list(pers ...

  6. Java中的异常处理从概念到实例

    1.概念 采用新的异常处理机制 在以往的程序开发过程中,经常采用返回值进行处理.例如,在编写一个方法,可以返回一个状态代码,调用者根据状态代码判定出错与否.若状态代码表示一个错误,则调用这进行相应的处 ...

  7. select函数实例代码

    select函数简解: selct 称之为多路复用IO,使用它可以让程序阻塞在select上,而非实际IO函数上. int select(int nfds, fd_set *readfds, fd_s ...

  8. Apache 查找httpd.conf文件

    Linux下查找httpd.conf文件 $ find / -name httpd.conf  

  9. python字典形list 去重复

    data_list = [{"}] run_function = lambda x, y: x if y in x else x + [y] return reduce(run_functi ...

  10. nginx Keepalived高可用集群

    一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...