# -*- 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. ACM编程网站

    ACM:ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate ProgrammingContest(ACM-ICPC或ICPC)是由美国计算机协会(ACM) ...

  2. M - 非常可乐

    很明显看出来的广搜题目,不过因为有3个杯子相互倾倒,所以会产生6种倒发,比较冗杂,不过应该可以构造一个数组来解决这个问题,试试看吧 ////////////////////////////////// ...

  3. Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project taotao-manager-web: Failed to clean project: Failed to delete \target\tomcat\logs\access_log.201

    点击console右上角叉号然后再点击红色小方形terminate

  4. python2.+进化至python3.+ 语法变动差异(不定期更新)

    1.输出 python2.+ 输出: print "" python3.+ 输出: print ("") 2.打开文件 python2.+ 打开文件: file ...

  5. 独立说&花旗世界公民精英讲座胜利举行!

    独立说帮助大学生更快地进入work-ready状态‌‌:http://www.dulishuo.com/独立说&花旗世界公民精英讲座胜利举行!:http://www.dulishuo.com/ ...

  6. 页游AS客户端架构设计历程记录

    以下是一个只用JAVA做过服务器架构的程序员做的AS客户端架构,希望大家能推荐好的框架和意见,也求AS高程们的引导,等到基本功能成形后,低调开源,框架可以支持一个中度型页游的开发,本文不断更新中... ...

  7. Android RelativeLayout 布局android:layout_centerHorizontal="true"注意

    特别注意,如果要是 android:layout_alignTop="@id/bind_decode_item_layout" android:layout_centerHoriz ...

  8. Android使用DOM生成和输出XML格式数据

    Android使用DOM生成和输出XML格式数据 本文主要简单解说怎样使用DOM生成和输出XML数据. 1. 生成和输出XML数据 代码及凝视例如以下: try { DocumentBuilderFa ...

  9. [置顶] 数据持久层(DAO)常用功能–通用API的实现

    在Web开发中,一般都分3层. Controller/Action 控制层, Service/Business 服务层/业务逻辑层, Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现 ...

  10. 在安装twincat plc时,出现 there are some files marked for deletion on next reboot.please reboot first then

    在注冊表内"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\ "中删除注冊表值 " ...