mysql日志分析神器之mysqlsla
Updated:
背景
什么是mysqlsla?
Mysqlsla 是daniel-nichter 用perl 写的一个脚本,专门用于处理分析Mysql的日志而存在。
mysqlsla 能解决什么问题?
作为一名Mysql DBA,日常工作中处理日志是再正常不过的事情了。 通过Mysql的日志主要分为:General log,slow log,binary log三种。通 过query日志,我们可以分析业务的逻辑,业务特点。通过slow log,我们可以找到服务器的瓶颈。通过binary log,我们可以恢复数据。Mysqlsla 可以处理其中的任意日志,这也是我喜欢它的最主要原因之一。
为什么选择mysqlsla?
分析mysql日志的工具当然不止mysqlsla一种,据我所知的有:
- mysqldumpslow
- mysqlbinlog
- myprofi
- mysql-explain-slow-log
- mysql-log-filter
- pt-query-digest
- mysqlsla
下面做一个对比:
工具 | 一般统计 | 高级统计 | 语言 | 优势 | 针对log | |
---|---|---|---|---|---|---|
mysqldumpslow | 支持 | 不支持 | perl | mysql官方自带 | slow | |
myprofi | 支持 | 不支持 | php | 简单 | slow | |
mysql-log-filter | 支持 | 部分支持 | python | 简单 | slow | |
mysql-explain-slow-log | 支持 | 不支持 | perl | 无 | slow | |
mysqlbinlog | 支持 | 不支持 | 二进制 | mysql官方自带 | binary log | |
mysqlsla | 支持 | 支持 | perl | 总能强大,使用简单,自定义能力强 | 所有日志,包括自定义日志 | |
pt-query-digest | 支持 | 支持 | perl | 总能强大,使用简单,自定义能力强 | 所有日志,包括自定义日志 |
根据以上特点,最适合的工具非 mysqlsla 与 pt-query-digest 莫属。 mysqlsla与pt-query-digest的作者是同一个人。现在主打开发pt系列工具。由于个人已经使用过mysqlsla 三年,被其强大的功能所吸引,可以完成DBA工作的99%的需求,所以这里详细介绍mysqlsla的使用,并对现有mysqlsla的一些不足,进行二次开发。
mysqlsla介绍
大致将mysqlsla 分解出来分为: Mysqlsla的安装,Mysqlsla的功能,Mysqlsla的用法,Mysqlsla 的filter,Mysqlsla的report,Mysqlsla的replay,Mysqlsla的user-defined-Logs。 其中最核心的当然是:filter以及report。
大致流程是: LOGS(UDL,defalut) -> parse -> filter -> sort -> reprot -> replay .
这里说的,Mysqlsla可以处理任意日志。默认可以处理mysql的三种常见日志。
如:General log,binary log,slow log
Slow log: mysqlsla lt slow slow.log
General log: mysqlsla lt general general.log
Binary log: mysqlbinlog bin.log | mysqlsla lt binary
mysqlsla安装
- Download mysqlsla2.03.tar.gz
- tar -xvfz mysqlsla2.03.tar.gz
- cd mysqlsla2.03
- perl Makefile.PL
- make
- make install
mysqlsla的基本使用
- .mysqlsla Config File
~.mysqlsla 这个文件,类似Mysql 里面的配置文件.cnf。 mysqlsla 启动都会读取这个全局配置文件。如:
|
|
注意点: 这里的参数,不能加 — 或者 -
- 基本命令和使用
这里罗列一下在Mysql工作中最最最常用的命令,使用率在80%
|
|
mysqlsla的核心功能之filter
filter 分为两种:
* meta-property filter
* statment filter
statment , 上面已经详细介绍过,这里详细介绍meta-property filter。
[meta][op][value] , 这里详细介绍什么是meta,meta有哪些值。
由于种类实在是太多,所以这里也只会列出工作中,最最最常用的meta参数,基本可以解决99%的需求。
log类型 | meta | 解释 | 限制 |
---|---|---|---|
all | c_sum | SQL次数总和 | 无 |
all | db | db名称 | 只能用作meta-filter,不能用作sort |
all | exec | 真实执行时间 | 只能用做sort,不能filter |
all | exec_sum | c_sum*exec | 只能作用sort,不能filter |
slow | host | 主机名 | 只能用作meta-filter,不能用作sort |
slow | ip | ip地址 | 只能用作meta-filter,不能用作sort |
slow | l_avg | 锁的平均等待时间 | 无 |
slow | re_sum | rows_examined的总和 | 无 |
slow | re_avg | rows_examined的平均值 | 无 |
slow | rs_sum | rows_sent的总和 | 无 |
slow | rs_avg | rows_sent的平均值 | 无 |
slow | t_sum | SQL执行时间的总和 | 无 |
slow | t_avg | SQL执行时间的平均值 | 无 |
slow | user | 用户名 | 无 |
general | cid | 连接id | 无 |
general | host | 主机名 | 无 |
general | user | 用户名 | 无 |
binary | ext | 执行时间 | 无 |
udl | 无 | 无 | 无 |
详细过滤的过程,请参考 MySQL::Log::ParseFilter 模块。
上列出的meta-property name,不仅仅用于filter,更加可以用于sort,所以sort我就不重复,使用规则请参考filter。
mysqlsla的核心功能之report
基本格式为:standard,但是你可以自己覆盖掉standard格式输出。这里的report format,为了兼容所有人,这里都是用sprintf 进行输出,而不是用perl 自己的格式,所以通用性非常的强。
比如用—report-format (-rf)FILE 可以替换。
然后基本模板如下:
|
|
一个自定义的slow标准模板
|
|
一个自定义的general log标准模板
|
|
一个自定义的binary log标准模板
|
|
一个自定义的msl log标准模板
|
|
一个自定义的udl log标准模板
|
|
这也就是平时看到的默认格式。个人觉得这个功能非常好用,当然标准格式就已经满足90%的需求,当然对于比较特殊的需求,可以做特殊的格式化输出。
非常强大,谁用谁知道。
mysqlsla的其他高级功能: replay,user-defined-logs
这些高级功能,我用的比较少,所以这里不多介绍。如果大家实在想用,可以参考官方文档。
最后
这里,基本上已经将mysqlsla的使用都介绍了一遍,如果你还没有使用,那就赶紧使用吧。
如果还想知道更多的内如:
1)mysqlsla 是如何进行filter的?
2)mysqlsla 是如何进行abstract-in SQL的?
3)mysqlsla 是如何进行SQL解析的?
4)mysqlsla 的内部工作流程和原理?
5)mysqlsla 的bug list,以及如何修复?
敬请关注下一节mysqlsla源码分析。