未来往事
与人交往,要善于发现别人的优点。 [2017年 第47周/共52周]

MySQL慢日志分析工具mysqlsla安装及使用指南

MySQL慢日志分析工具mysqlsla安装及使用详细说明

最后更新时间:2013-01-29
  • 2013-01-18 首次整理成文档
  • 2013-01-29 发布到博客并整理添加了实例及工具对比表


一、MySQL慢日志分析意义
在运营 PHP+MySQL 网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询来记录超过指定时间的SQL语句,MySQL慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,找到影响效率的SQL语句,然后采取相应的措施进行代码或缓存等优化,从而提高整个系统的性能。

关于MySQL慢查询记录日志启用可以参考这篇文章:《MySQL开启慢查询日志记录 - MySQL优化》

二、常见的5种MySQL日志文件分析工具:
# mysqldumpslow slow_query_9.log    (推荐)

[root@monitor opt]# mysqlsla -lt  slow slow_query_9.log  (强烈推荐)

[root@monitor opt]# php parser.php -slow slow_query_9.log (php强烈推荐)

[root@monitor opt]# ./mysql_explain_slow_log --user=root --password=123456 < slow_query_9.log  (不推荐)

[root@monitor opt]# python mysql_filter_slow_log.py --no-duplicates slow_query_9.log (推荐)

以上命令是在CentOS系统下测试

5种MySQL日志文件分析工具对比:
点击在新窗口中浏览此图片
本文主要介绍mysqlsla日志分析工具,这里不再多赘述其他。

三、mysqlsla分析工具安装
mysqlsla工具是hackmysql.com推出的一款日志分析工具(该网站还维护了 mysqlreport, mysqlidxchk 等比较实用的mysql工具)。整体来说,功能非常强大。数据报表,非常有利于分析慢查询的原因,包括执行频率,数据量,查询消耗等。
1、下载 mysqlsla
附官方网站:http://hackmysql.com/mysqlsla
[root@monitor opt]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz

2、解压并进入安装目录
[root@monitor opt]# tar -zxvf mysqlsla-2.03.tar.gz
[root@monitor opt]# cd mysqlsla-2.03
[root@monitor mysqlsla-2.03]# less INSTALL    //浏览下安装说明

3、执行perl脚本检查包依赖关系
[root@monitor mysqlsla-2.03]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for mysqlsla

补充:安装mysqlsla需要perl-DBI和per-DBD-Mysql两模块的支持,centos下安装mysql自动安装了这2个模块。

4、安装mysqlsla
[root@monitor mysqlsla-2.03]#make && make install


常见错误:
1)类似错误:Can't locate ExtUtils/MakeMaker.pm OR Time/HiRes.pm in @INC
     可参考这篇文章:《Can't locate ExtUtils/MakeMaker.pm OR Time/HiRes.pm in @INC解决方法》
2)类似错误:Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl
     可参考这篇文章:《Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl错误解决方法》

四、mysqlsla分析工具使用说明
语法:
Slow log: mysqlsla -lt slow slow.log
General log: mysqlsla -lt general general.log
Binary log: mysqlbinlog bin.log | mysqlsla -lt binary -

这里以slow log为例:
[root@monitor mysqlsla-2.03]# mysqlsla -lt slow /opt/slow.log | more
mysqlsla -lt slow /opt/slow.log  | more                
Use of uninitialized value $line in pattern match (m//) at /usr/local/bin/mysqlsla line 675, <LOG> line 211.
Use of uninitialized value $line in pattern match (m//) at /usr/local/bin/mysqlsla line 692, <LOG> line 211.
Report for slow logs: /opt/slow.log
35 queries total, 15 unique
Sorted by 't_sum'
Grand Totals: Time 229 s, Lock 0 s, Rows sent 443.57k, Rows Examined 10.11M


______________________________________________________________________ 001 ___
Count         : 7  (20.00%)
Time          : 42.930986 s total, 6.132998 s avg, 4.046063 s to 10.72709 s max  (18.76%)
Lock Time (s) : 354 otal, 51 vg, 38 o 65 ax  (15.26%)
Rows sent     : 54 avg, 54 to 54 max  (0.09%)
Rows examined : 1.58k avg, 222 to 4.57k max  (0.11%)
Database      : dz_nanchang
Users         :
       dz_nanchang@ 192.168.1.10 : 42.86% (3) of query, 11.43% (4) of all users
       dz_nanchang@ 192.168.1.15 : 42.86% (3) of query, 8.57% (3) of all users
       dz_nanchang@ 192.168.1.20 : 14.29% (1) of query, 2.86% (1) of all users

Query abstract:
SET timestamp=N; SELECT t.* FROM pre_forum_thread t WHERE t.fid='S' AND (t.displayorder IN (N2)) ORDER BY displayorder DESC, lastpost DESC LIMIT N;

Query sample:
SET timestamp=1354213966;
SELECT t.* FROM pre_forum_thread t
                        WHERE  t.fid='139'  AND (t.displayorder IN (0, 1))
                        ORDER BY displayorder DESC, lastpost DESC
                        LIMIT 54;
……………………
……………………


统计结果选项说明:
+阅读全文

Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl错误解决方法

在安装使用mysqlsla时遇到了这个常见的错误,错误大致描述如下:
[root@vpn mysqlsla-2.03]# mysqlsla -lt slow /opt/slow.log | more
Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/bin/mysqlsla line 2098.
BEGIN failed--compilation aborted at /usr/bin/mysqlsla line 2098.


错误......
+阅读全文

WEB日志文件格式转换为NCSA公用日志文件格式

日志的重要性已经越来越受到服务器运维人员和程序员的重视,WEB日志更是不言而喻。WEB日志是网站分析和网站数据数据整理最基础的数据,了解其格式和组成将有利于更好地进行数据的收集、处理和分析。常见的WEB日志格式主要由两类,一类是Apache的NCSA日志格式,另一类是II......
+阅读全文

chrome浏览器页面卡屏或卡住不能上下滚动终极解决方法

chrome浏览器网页页面卡屏,页面经常卡住不能上下滚动彻底解决方法

......
+阅读全文

MySQL存储引擎: InnoDB 还是 MyISAM?

MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们去研究一下,这里的文章只考虑 MyISAM 和InnoDB这两个,因为这两个是最常见的。

下面先让我们回答一些问题:

你的数据库有外键吗?
你需要事务支持吗?
你需要全文索引吗?
你经常使用什么样的查询模式?
你的数据有多大?

......
+阅读全文

Drupal6.28 框架简体中文包安装教程

下载地址:http://localize.drupal.org/translate/downloads,下载最新的Drupal6中文汉化包文件

到 admin->site building->modules [admin/build/modules] 启用 Locale 模块。

到 admin->site configuration->language [admin/settings/language]
点击页面介绍内的“import page”,进入语言包导入页面[admin/build/translate/import]

在“Import translation”一栏中的“Language file: ”下方,点击“浏览”按钮,选择已下载的po文件,接着在“Import into: ”的下拉选框中选择“Chines......
+阅读全文

MySQL开启慢查询日志记录 - MySQL参数

MySQL慢查询记录日志对于跟踪PHP+MySQL体系下的MySQL负载调优问题很有用处,比如安装了很多Discuz!插件的用户,这样可以大概排查出那些插件有代码问题。其实启用MySQL的慢查询日志很简单,只需要在MySQL的配置文件里添加log-slow-queries和long_query_time两个参数即可。

Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
long_query_time = 2    //查询的时间,即当一条 SQL 执行时间超过2秒的时候才记录
......
+阅读全文

Can't locate ExtUtils/MakeMaker.pm OR Time/HiRes.pm in @INC解决方法

在编译安装mysqlsla遇到如下错误提示,该错误缺少依赖的包文件所致。解决方法如下:

错误提示一:
[root@monitor mysqlsla-2.03]# perl Makefile.PL   //perl脚本检查包依赖关系
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 2.
BEGIN failed--compilation aborted at Makefile.PL line 2.

缺少perl-ExtUtils-MakeMaker依赖包,安装即可

[root@localhost mysqlsla-2.03]# yum insta......
+阅读全文

VMware宿主机和虚拟机互相ping不通

vmware workstation宿主机ping不通centos虚拟机,宿主机和centos虚拟机都可以正常上网。问题描述:今天在vmware workstation9.0中新安装了CentOS6.3系统用于实验测试,安装完成后配置好IP地址、网关、DNS后测试虚拟机已经可以正常上网了,虚拟机和宿主机之间采用的是桥接方式上网,但是当我打算本地通过SecureCRT工具连接这台刚安装好的CentOS 6.3虚拟机......
+阅读全文

vsftpd cmds_allowed 实现权限控制

在实际的系统运维工作中,我们经常会面临或提及服务器数据安全问题,例如FTP连接时用户对文件可以进行覆盖操作 不具有删除权限等等。本文通过vsftpd cmds_allowed 参数配置对vsftpd服务实现精细权限控制做了详细的说明。

vsftpd cmds_allowed
cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,
PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,
RNTO,SITE,SIZE,STOR,TYPE,USER,ACCT,
APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

注意:一定不能使用换行和空格,不然就没效果..

# ABOR - abort a file transfer
# CWD - change working directory
#
......
+阅读全文

Word 2007/2010/2013复选框 圆形框打叉 方框打勾打叉

Office 2007 2010 2013 word文档,插入复选框,方框打勾(打对号)方框打叉 圆形框打叉方法汇总:

插入复选框可以参照《Word 2007/2010/2013插入复选框 方框打勾打叉方法》

方框打勾(打对号) 方框打叉:
在Word中输入大写字母“R”,然后字体改成“Wingdings 2”,就OK了!大小的话,可以选择字体大小来控制!(在小方框里打勾√)

在Word中输入大写字母“S”,然后字体改成“Wingdings 2”,就OK了!大......
+阅读全文

Word 2007/2010/2013插入复选框 方框打勾打叉方法

Office 2007 2010 2013 word文档,插入复选框,方框打勾(打对号) 方框打叉的几种方法:

方法一:复选框
1.首先把[开发工具]栏调出来:
文件--选项--自定义功能区--主选项卡--勾选[开发工具] 或 直接在菜单栏右击选择自定义功能区也行。
2.切换到[开发工具]选项卡--点亮[设计模式],然后展开旁边那个锤子和扳手的[旧式工具]按钮,插入ActiveX复选框,再点一下[设计模式],就可以使用复选框了。
3、在复选框上点右键,“复选框”......
+阅读全文

MySQL修复数据表的两个常用命令

在长时间使用MySQL后,数据库可能会出现一些问题。大多数问题可以通过简单的操作进行快速修复。下面介绍两种MySQL修复表的方法。

1. myisamchk
使用myisamchk必须暂时停止MySQL 服务器。例如,我们要检修blog数据库。执行以下操作:

# service mysql stop (停止MySQL)
# myisamchk -r /datawhere/blog/*MYI
# service mysql start myisamchk 会自动检查并修复数据表中的索引错误。

2. mysqlcheck
使用mysqlcheck无需停止MySQL,可以进行热修复。操作步骤如下:(检修 blog库)

# mysqlcheck -r -uroot -p blog

......
+阅读全文

MySQL常用查看数据库 数据表的命令

MySQL数据库查看数据库 数据表的命令。进入MySQL Command line client下

查看当前使用的数据库:
mysql>select database();
mysql>status;
mysql>show tables;

mysql>show databases;//可以查看有哪些数据库,返回数据库名(databaseName)

mysql>use databaseName;  //更换当前使用的数据库

mysql>show tables; //返回当前数据库下的所有表的名称
或者也可以直接用以下命令
mysql>show tables from databaseName;//databaseName可以用show databases得来


mysql查看表结构命令,如下:
desc 表名;
show columns from 表名;
......
+阅读全文

MySQL数据库建表语句实例

MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看。

1、最简单的:
CREATE TABLE t1(
    id int not null,
    name char(20)
);


2、带主键的:
a:
CREATE TABLE t1(
    id int not null primary key,
    name char(20)
);
b:复合主键
CREATE TABLE t1(
    id int not null,
    name char(20),
    primary key (id,name)
......
+阅读全文