zoukankan      html  css  js  c++  java
  • mysql主从日志的定期清理

    mysql主从的binlog定时删除是很重要的,一般是通过expire_logs_days = 10来设置binlog保留的天数(mysql5.0一下版本不支持),但有时这还不够,假如有几天的日志量非常大,硬盘可能会满,所以不但要设置保留的天数,还要监控硬盘的空间使用情况。写了一个脚本,适合各个版本的mysql,保留3天的日志,当存放日志的硬盘使用率超过80%,则保留2天,但至少会保留一天的binlog日志文件。

    1. #!/bin/env python 
    2. # -*- coding: utf-8 -*- 
    3. ############################################################## 
    4. #查看存在binlog的目录位置并找出3天前的最后一个bin-log文件名字 
    5. #删除3天以前的binlog文件,删除之后data1目录挂载的硬盘使用率超 
    6. #过的80%的话,继续删除2天前的日志文件,至少保留一天的日志。 
    7. ############################################################## 
    8.  
    9. import os,sys,time,MySQLdb 
    10.  
    11. def log_w(text): 
    12.     logfile = "/usr/local/zabbix/bin/delet.log" 
    13.     now = time.strftime("%Y-%m-%d %H:%M:%S") 
    14.     tt = now + " " + str(text) + " " 
    15.     f = open(logfile,'a+') 
    16.     f.write(tt) 
    17.     f.close() 
    18.  
    19. def mysql_conn(port,lastlog,days): 
    20.     try: 
    21.         center_ip = '127.0.0.1' 
    22.         center_user = 'repl_monitor' 
    23.         center_passwd = 'VQMQLGwTaw3k0UV8' 
    24.         sql = "PURGE MASTER LOGS TO '%s';" % lastlog 
    25.         conn = MySQLdb.connect(host = center_ip,port = int(port),user = center_user,passwd = center_passwd,connect_timeout=5) 
    26.         cursor = conn.cursor()  
    27.         cursor.execute(sql) 
    28.         alldata = cursor.fetchall() 
    29.         cursor.close() 
    30.         conn.close() 
    31.         text = "Deltet before %s days binlog,deltet %s before !" % (days,lastlog) 
    32.         log_w(text) 
    33.     except Exception,e: 
    34.         log_w(e) 
    35.  
    36. def find_logdir(): 
    37.     conn = "find / -name binlog|grep -v usr" 
    38.     logdir_list = os.popen(conn).readlines() 
    39.     if len(logdir_list) != 0: 
    40.         for logdir in logdir_list: 
    41.             datadir = logdir.strip().split("/")[1] 
    42.             if "mysql_log" in logdir.strip(): 
    43.                 port = 3306 
    44.             else: 
    45.                 port = logdir.strip().split("/")[3].split("-")[-1] 
    46.             days = 
    47.             while 1: 
    48.                 conn = "find %s -mtime %s|sort" % (logdir.strip(),days) 
    49.                 count = os.popen(conn).readlines() 
    50.                 if len(count) != 0: 
    51.                     lastlog = count[-1].strip().split("/")[-1] 
    52.                     mysql_conn(port,lastlog,days) 
    53.  
    54.                 df = "df -h|grep -e '%s$'|awk '{print $5}'|awk -F '%%' '{print $1}'" % datadir 
    55.                 disk = os.popen(df).read().strip() 
    56.                 if not disk: 
    57.                     break 
    58.                 else: 
    59.                     if int(disk) < 80: 
    60.                         break 
    61.                     else: 
    62.                         days = days - 
    63.                         if days == 1: 
    64.                             break 
    65.     else: 
    66.         sys.exit() 
    67.  
    68. if __name__ == "__main__": 
    69.     find_logdir() 

    本文出自 “王伟” 博客,请务必保留此出处http://wangwei007.blog.51cto.com/68019/1123088

  • 相关阅读:
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
    install ubuntu on Android mobile phone
    Mac OS, Mac OSX 与Darwin
    About darwin OS
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
    Linux下编译安装qemu和libvirt
    libvirt(virsh命令总结)
    深入浅出 kvm qemu libvirt
    自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
  • 原文地址:https://www.cnblogs.com/wajika/p/6235645.html
Copyright © 2011-2022 走看看