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)
解析之后显示的结果:

MySQL 数据库慢查询日志分析脚本的更多相关文章
- MySQL之慢查询日志分析
在MySQL命令行中查看慢查询日志是否打开了: mysql> show variables like '%slow_query%'; +---------------------------+- ...
- mysql使用慢查询日志分析数据执行情况
#查询慢查询日志文件路径show variables like '%slow_query%';#开启慢查询日志 ; #设置慢查询阀值为0,将所有的语句都记入慢查询日志 ;#未使用索引的查询也被记录到慢 ...
- MySQL慢查询日志分析
一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> show variables like '%slow%'; +-------------------- ...
- MySQL慢查询日志分析提取【转】
原文:https://www.cnblogs.com/skymyyang/p/7239010.html 一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> ...
- MySql数据库慢查询
一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...
- MySQL 通用查询日志和慢查询日志分析
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句.2)慢查询 ...
- 关于MySQL 通用查询日志和慢查询日志分析
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
- 关于MySQL 通用查询日志和慢查询日志分析(转)
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
- Mysql慢查询和慢查询日志分析
Mysql慢查询和慢查询日志分析 众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的.下面总结一些使用过或者研究过的经验,从配置以 ...
随机推荐
- 【算法与数据结构】二叉堆和优先队列 Priority Queue
优先队列的特点 普通队列遵守先进先出(FIFO)的规则,而优先队列虽然也叫队列,规则有所不同: 最大优先队列:优先级最高的元素先出队 最小优先队列:优先级最低的元素先出队 优先队列可以用下面几种数据结 ...
- 请求转发、包含、重定向 getAttribute 和 setAttribute POST和GET编码
一.请求转发 请求包含 请求重定向 Demo5.java 注意:doPost()方法中别忘写doGet(request, response); public void doGet(HttpS ...
- VBA计算器的全部实现
我们将加入 除零逻辑 和 对话框提示. 后面 就很简单了~~~ 提供效果图跟 代码 代码示例 Sub 矩形1_Click() ' ' 矩形1_Click Macro ' 代码编辑 Dim number ...
- LeetCode.876-链表的中间节点(Middle of the Linked List)
这是悦乐书的第337次更新,第361篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第206题(顺位题号是876).给定具有头节点的非空单链表,返回链表的中间节点.如果有两 ...
- LeetCode算法题-Most Common Word(Java实现)
这是悦乐书的第321次更新,第342篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第190题(顺位题号是819).给定一个段落和一组禁止词,返回不在禁止词列表中的最常用词 ...
- C/C++ 内存模型
C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...
- [转帖]Windows下cwRsyncServer双机连续同步部署
Windows下cwRsyncServer双机连续同步部署 https://www.cnblogs.com/nulige/p/7607503.html 找时间做一下测试 应该能更好的实现 自动部署的功 ...
- 补充[BNDSOJ]小p的数列
强烈安利gjz的题解,看一遍即可ac:传送门 进入重点: 为啥$to=(dp[i][k][ii]+dp[k+1][j][jj])/2$ 位运算重点:a&b=a+b-a|b 为啥呢? 例子: a ...
- Quartz.NET | 佳佳的博客
原文:Quartz.NET | 佳佳的博客 Quartz.NET 是一个定时计划任务的框架,支持 .NET Core. 本文示例代码大部分来自于官方教程:Quartz.NET - Quartz.NET ...
- MySQL索引优化(索引单表优化案例)
1.单表查询优化 建表SQL CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUT ...