# -*- coding:utf8 -*-
'''
Created on 2017年1月9日 @author: qiancheng
''' import re
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import subprocess
import time
import sys
import threading class mail_to:
def __init__(self,_message,_file):
self.msg=_message
mail_host="x.x.x.x" #smtp-server
mail_user="qiancheng" #username
mail_pass="xxxxxxx" #password
sender = 'qiancheng@showjoy.com'
receivers = ['qiancheng@showjoy.com']
#receivers = ['qiancheng@showjoy.com']
message = MIMEMultipart()
message['From'] = Header("qiancheng@showjoy.com<qiancheng@showjoy.com>")
message['To'] = Header("qiancheng@showjoy.com<qiancheng@showjoy.com>")
#message['To'] = Header("qiancheng@showjoy.com<qiancheng@showjoy.com>")
#邮件标题
subject = '本周慢查询日志'
message['Subject'] = Header(subject,'utf-8')
#邮件正文
message.attach(MIMEText(self.msg,'plain','utf-8'))
#txt附件
mail_file=open(_file,'rb')
load=MIMEText(mail_file.read(),'base64','utf-8')
load['Content-Type']='application/octet-stream'
load["Content-Disposition"] = 'attachment; filename="slow.log.txt"'
message.attach(load) try:
smtpObj=smtplib.SMTP()
smtpObj.connect(mail_host)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.close()
mail_file.close()
except smtplib.SMTPException:
print("Error: 无法发送邮件") class analysis_log(object):
def __init__(self,_dbname,_filename,_wfilename):
self.db_name=_dbname
self.wfilename = _wfilename
self.filename = _filename
def do_openfile(self):
if os.path.exists(self.filename):
f=open(self.filename, 'r')
w=open(self.wfilename,'w')
start_value=0
continue_value=0
while True:
line=f.readline()
if line:
check_start = self.do_analysis(line) if check_start == 'success_app_success':
start_value=1
if check_start == 'success_app_fail':
start_value=0
continue
if check_start == 'fail':
continue_value=1
if re.search('timedate',check_start) != None and start_value == 1 and continue_value == 0:
w.write(check_start)
continue
if start_value == 1 or (start_value == 1 and continue_value == 1):
#print check_start
w.write(line)
else:
continue
else:
break
f.close()
w.close()
self.mail_to_someone()
else:
print (self.filename+"not exists")
def do_analysis(self,_line):
if re.search('SET timestamp',_line) == None:
if re.search('User@Host',_line) == None:
result='fail'
else:
result='success'
if re.search(self.db_name+'\['+self.db_name+'\]',_line) == None:
result= result+'_'+'app_fail'
else:
result= result+'_'+'app_success'
return result
else:
#timestamp=_line.split('=')[-1]
timestamp=float(re.findall('\d+',_line)[-1])
_time = time.localtime(timestamp)
d=str(time.strftime("%Y-%m-%d %H:%M:%S",_time))
return 'SET timedate='+d+'\n'
def mail_to_someone(self):
mail_to('程序产生的慢查询日志,'+self.db_name+'数据库',self.wfilename)
if __name__ == '__main__': for dbname in sys.argv:
if dbname == 'shop':
file_name='C:\\work\\showjoy\\S-C12-slow.log'
wfile_name='C:\\work\\showjoy\\S-C12-slow.log.txt'
#subprocess.call('scp root@s-c12:/usr/local/mysql/data/dbdata_3310/S-C12-slow.log /tmp/S-C12-slow.log',shell=True)
#subprocess.call('ssh root@s-c12 \'echo "" > /usr/local/mysql/data/dbdata_3310/S-C12-slow.log\'',shell=True)
analysis1=analysis_log(dbname,file_name,wfile_name)
t1=threading.Thread(target=analysis1.do_openfile())
elif dbname == 'trade':
file_name='C:\\work\\showjoy\\S-C9-slow.log'
wfile_name='C:\\work\\showjoy\\S-C9-slow.log.txt'
#subprocess.call('scp root@s-c12:/usr/local/mysql/data/dbdata_3310/S-C12-slow.log /tmp/S-C12-slow.log',shell=True)
#subprocess.call('ssh root@s-c12 \'echo "" > /usr/local/mysql/data/dbdata_3310/S-C12-slow.log\'',shell=True)
analysis2=analysis_log(dbname,file_name,wfile_name)
t2=threading.Thread(target=analysis2.do_openfile())
else:
print ("请输入数据库名字,如shop,trade。空格隔开!")
日志处理,timstamp 转换成datetime,把提取shop,这种程序跑出来的sql,去除root和其他人工的语句。

python处理mysql慢查询日志的更多相关文章

  1. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  2. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  3. ELK logstash 处理MySQL慢查询日志(初步)

    写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...

  4. MySQL慢查询日志

    实验环境: OS X EI Captian + MySQL 5.7 一.配置MySQL自动记录慢查询日志 查看变量,也就是配置信息 show (global) variables like '%slo ...

  5. MySQL慢查询日志释疑总结

      之前写了一篇"MySQL慢查询日志总结",总结了一些MySQL慢查询日志常用的相关知识,这里总结一下在工作当中遇到关于MySQL慢查询日志的相关细节问题,有些是释疑或自己有疑惑 ...

  6. 企业级中带你ELK如何实时收集分析Mysql慢查询日志

    什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...

  7. MySQL慢查询日志相关的文件配置和使用。

    MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...

  8. MySQL 慢查询日志配置与简析

    MySQL慢查询日志配置与简析 By:授客 QQ:1033553122   <1> 查看是否开启慢查询日志 SHOW VARIABLES LIKE 'slow%'; 说明: a. 如果sl ...

  9. (6) MySQL慢查询日志的使用

    一. 设置方法 使用慢查询日志里捕获 启用之前需要先进行一些设置 方法一:全局变量设置 设置慢查询日志的日志文件位置 set global slow_query_log_file = "D: ...

随机推荐

  1. libvirt基于安装

  2. 在eclipse下远程调试hadoop2.0

    在<在eclipse下编译hadoop2.0源码>一文中,我详细介绍了如何在eclipse环境和命令行环境下编译hadoop2.0源代码,并简单介绍了如何构建hadoop环境,这篇文章将着 ...

  3. SQL随笔

    多表分页查询: ,; 向表中插入新的字段: ALTER TABLE `Table_name` ) NOT NULL DEFAULT '' AFTER `id`;  更新表数据: UPDATE [LOW ...

  4. STUCTS LABLE ‘S BENEFIT

    {LJ?Dragon}[注]Struts标签的三个好处 RELATED LINKS 0.UTF-8 有无BOM的区别 UTF-8 BOM 06. 几款网页数据抓取软件 SOFTWARE_INTRODU ...

  5. dubbo源码分析二:服务发布

    本文将深入分析dubbo的服务发布涉及到的流程及主要类的代码.首先,我们先从类的关系图来看一下dubbo发布服务涉及到的相关类. 1.类图 上图展示了部分服务发布过程中需要使用到的类和接口,其中: s ...

  6. uva:10340 - All in All(字符串匹配)

    题目:10340 - All in All 题目大意:给出字符串s和t,问s是否是t的子串.s若去掉某些字符能和t一样,那么t是s的子串. 解题思路:匹配字符.t的每一个字符和s中的字符匹配.注意这里 ...

  7. YYCache 源码分析(二)

    本文分析YYMemoryCache实现原理: YYMemoryCache是内存缓存,所以存取速度非常快,主要用到两种数据结构的LRU淘汰算法 1.LRU Cache的容量是有限的,当Cache的空间都 ...

  8. 4道过滤菜鸟的iOS面试题

    网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区 ...

  9. 案例:计算1!+2!+3!+......+n!

    /* * 1!+2!+3!+......+n! * */ import java.util.Scanner; public class ForTest{ public static void main ...

  10. 9.5noip模拟试题

    题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer.o ...