MySQL 数据库慢查询日志分析脚本

这个脚本是基于pt-query-digest做的日志分析脚本,变成可视化的格式。

目录结构是

./mysql_data/log
./mysql_data/log/tmp
./slow_query

# coding = gbk
__author__ = ‘T_two‘

import datetime
import os

IP = ‘111‘
dirname = os.path.dirname(os.path.abspath(__file__))
# 解析后的目录名
slow_query= os.path.join(dirname, ‘slow_query‘)
# pt-query-digest前的目录的
mysql_data = os.path.join(os.path.join(dirname, ‘mysql_data‘), ‘log‘)
# pt-query-digest后的目录的
tmp = os.path.join(mysql_data, ‘tmp‘)

def getYesterday():
    today=datetime.date.today()
    yesterday = str(today - datetime.timedelta(days=1))
    return yesterday

def getLog(yes_time, slow_query):
    # 对日志进行pt-query-digest分析
    before_name = yes_time.replace(‘-‘, ‘‘) + ‘-‘ + ‘slow-query.log‘
    # pt-query-digest之前的日志 b_filename
    b_filename = os.path.join(mysql_data, before_name)
    # print(b_filename)
    # pt-query-digest之后的日志 a_filename
    after_name = yes_time.replace(‘-‘, ‘‘) + ‘-‘ + IP + ‘-‘ + ‘slow-query.log‘
    a_filename = os.path.join(tmp, after_name)
    # print(a_filename)
    # 最终格式化的日志 e_filename
    end_name = IP + ‘-slow-log-‘ + yes_time + ‘.txt‘
    e_filename = os.path.join(slow_query, end_name)
    #print(e_filename)
    return b_filename,a_filename,e_filename

def getSlowquery(b_filename,a_filename,e_filename):
    print(‘File format starting...‘)
    #os.system(‘pt-query-digest ‘+ b_filename + ‘>‘ + a_filename)

    a_slow_query = open(a_filename, ‘r‘, encoding = ‘utf8‘)
    e_slow_query = open(e_filename, ‘w‘, encoding = ‘utf8‘)
    _line = ‘‘
    line = a_slow_query.readlines()[20:]            # 对文件切片,去除不需要的前20行。
    for line in line:
        line = line.strip()
        # 提取需要的行
        if  line.startswith(‘#‘)   and ‘# Hosts‘ not in line and ‘# Users‘ not in line and ‘# Databases‘ not in line  and  ‘byte‘ not in line                 and ‘# Count‘ not in line  and ‘# Exec time‘ not in line :
            pass
        elif line == ‘‘:
            pass
        else:
            # 序列号
            if  ‘# Query‘ in line: line = (‘\nNO.%s‘ % line.split()[2])
            # 执行次数
            elif ‘# Count‘ in line: line = (‘执行次数: %s‘ % line.split()[3])
            #执行时间
            elif ‘# Exec time‘ in line: line = (‘执行时间 Total: %s  min: %s  max: %s‘ % (line.split()[4],line.split()[5],line.split()[6],))
            # DB
            elif ‘# Databases‘ in line: line = (‘库名: %s‘ % line.split()[2])
            # 源IP
            elif ‘# Host‘ in line:line = (‘源IP: %s‘ % line.split()[2])
            # 用户名
            elif ‘# User‘ in line: line = (‘用户名: %s‘ % line.split()[2])

            _line = _line + line + ‘\n‘

    e_slow_query.write(_line)
    a_slow_query.close()
    e_slow_query.close()
    # 将文件拷贝到web目录下
    os.system(‘cp ‘ + e_filename + ‘ ‘ + web_dir)
    # 删除10天之前的数据
    os.system(‘find ‘ + str(slow_query) + ‘ -mtime +10 | xargs rm -rf ‘)
    os.system(‘find ‘ + mysql_data + ‘ -mtime +10 | xargs rm -rf ‘)
    os.system(‘find ‘ + tmp + ‘ -mtime +10 | xargs rm -rf ‘)

    print (‘File format end...‘)

if __name__ == ‘__main__‘:
    yes_time = getYesterday()
    b_filename,a_filename, e_filename = getLog(yes_time, slow_query)
    getSlowquery(b_filename,a_filename,e_filename)

  

解析之后显示的结果:

原文地址:https://www.cnblogs.com/yujiaershao/p/10237770.html

时间: 2024-08-19 17:59:19

MySQL 数据库慢查询日志分析脚本的相关文章

MySQL之慢查询日志分析

在MySQL命令行中查看慢查询日志是否打开了: mysql> show variables like '%slow_query%'; +---------------------------+-------------------------------------------+ | Variable_name | Value | +---------------------------+-------------------------------------------+ | slow_qu

关于MySQL 通用查询日志和慢查询日志分析

MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询 (1)通用查询日志 在学习通用日志查询时,需要知道两个数据库中的常用命令: 1) showvariables like '%version%'; 效果图如下: 上述命令,显示当前数据库中与版本号相关的东西.

MySQL 通用查询日志和慢查询日志分析

MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句.2)慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询 (1)通用查询日志 在学习通用日志查询时,需要知道两个数据库中的常用命令: 1) show variables like '%version%'; mysql> show variables like '%ve

PHP慢脚本日志和Mysql的慢查询日志(转)

1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候,会出现间歇性的502错误,如果在配置中设置了max_requests的话,超过数量也会出现502错误,而max_requests的设置,正是为了防止不安全的第三方library脚本的 内存泄露 ,当然你自己编写的脚本存在 死锁 的话,也会出现502现象. 如果你发现mysql负载并不高,但是php-fp

记一次mysql慢查询日志分析

MySQL慢查询日志分析 分析工具mysqlsla的安装以及使用,mysqlsla是hackmysql.com推出的一款MySQL的日志分析工具,功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等. 在CentOS下安装mysqlsla yum install perl-DBI perl-DBD-MySQL perl-devel -y #安装依赖包 wget ftp://ftp.tw.freebsd.org/pub/distfiles/mysqlsla-

mysql 慢查询日志分析

mysql慢查询: 慢查询相关的变量 slow_query_log:该参数控制着慢查询的状态, 1表示开启状态 ,0 表示关闭状态 slow_query_log_file:慢查询日志路径 long_query_time:最大查询阀值,查询的时间超过这个值就视为慢查询并且将其记录到慢查询日志中,慢查询日志路径 通过slow_query_log_file 这个变量设置 log_queries_not_using_indexes:没有使用到索引的查询语句是否记录到慢查询日志中. log_slow_sl

《Mycat学习笔记》 第二篇. MySql 读写分离与日志分析——主从多结点

1    环境说明 接上篇环境   <Mycat学习笔记> 第一篇. MySql 读写分离与日志分析——主从单结点 http://www.cnblogs.com/kaye0110/p/5134588.html 增加一套 mysql 实例,端口为3308 ,通过Binlog方式同步主机情况 localhost : 3306 主机,    在mycat 中配置为 writehost 1 localhost : 3307 从机 a ,在mycat 中配置为 readhost localhost :

mysql数据库show processlist结果分析

下面我们一起来看看关于mysql数据库show processlist结果分析,希望此文章对各位同学会有所帮助. mysql> show processlist; +-–+-----+------–+ | Id | User | Host | db | Command | Time| State | Info +-–+-----+------–+ |207|root |192.168.0.2:51621 |mytest | Sleep | 5 | | NULL |208|root |192.16

linux系统web日志分析脚本

linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照互联网上图文教程也无从下手.对于此情况我编写了一个web日志分析脚本,功能比较简单,无需配置,有需要的朋友可以再尝试一下.  脚本地址: gbk版(一般ssh客户端不用调整直接可用: wget http://jinxiang.oss-cn-hangzhou.aliyuncs.com/weblogch