mysqlreport 详解
2010-05-16 23:16

进行MySQL的配置优化,首先必须找出MySQL的性能瓶颈所在;而SHOW STATUS输出的报告正是用来计算性能瓶颈的参考数据。mysqlreport不像SHOW STATUS那样简单的罗列数据,而是对这些参考数据加以融合计算,整理成一个个优化参考点,然后DBA就可以根据这个优化参考点的值以及该点的衡量标准,进行对应调整。这篇文章既不分析mysqlreport的报告含义,也不说明优化参考点的计算公式和原理,只简单描述使用方法。后面再逐次深入分析。

mysqlreport主页和下载地址
web site:http://hackmysql.com/mysqlreport
download:http://hackmysql.com/scripts/mysqlreport-3.5.tgz

mysqlreport的安装极为简单,下载上述文档后,使用tar -xvf mysqlreport-3.5.tar解压后,在当前目录生成文件夹mysqlreport-3.5,该文件夹下的mysqlreport即是可执行程序。
注意:mysqlreport为perl脚本,用到DBI以及DBD::mysql,须正确安装后才能正常使用!

mysqlreport命令行选项参数

linux-8tpn:/home/kevin/perl # perl mysqlreport  --help mysqlreport v3.5 Apr 16 2008 mysqlreport makes an easy-to-read report of important MySQL status values.  Command line options (abbreviations work):    --user USER       Connect to MySQL as USER    --password PASS   Use PASS or prompt for MySQL user's password    --host ADDRESS    Connect to MySQL at ADDRESS    --port PORT       Connect to MySQL at PORT    --socket SOCKET   Connect to MySQL at SOCKET    --no-mycnf        Don't read ~/.my.cnf    --infile FILE     Read status values from FILE instead of MySQL    --outfile FILE    Write report to FILE    --email ADDRESS   Email report to ADDRESS (doesn't work on Windows)    --flush-status    Issue FLUSH STATUS; after getting current values    --relative X      Generate relative reports. If X is an integer,                      reports are live from the MySQL server X seconds apart.                      If X is a list of infiles (file1 file2 etc.),                      reports are generated from the infiles in the order                      that they are given.    --report-count N  Collect N number of live relative reports (default 1)    --detach          Fork and detach from terminal (run in background)    --help            Prints this    --debug           Print debugging information  Visit http://hackmysql.com/mysqlreport for more information.
选项解释
- -user连接MySQL的用户名
- -password连接MySQL的用户密码。命令行上出现该选项但没有给出参数时,mysqlreport将在用户回车后提示输入密码
- -hostMySQL服务器地址
- -portMySQL服务器的开发端口
- -socket本地MySQL UNIX域套接口路径
- -no-mycnf该选项指引mysqlreport不要读取 ~/.my.cnf,默认情况下会去读取这个文件。- -user 和 - -password 总是覆盖从 ~/.my.cnf 中取得的参数
- -infile从status文件读取数据,代替从服务器上读取
- -outfile打印报告后,将报告同时写入该选项指定的文件中。mysqlreport 的内部机制总是先将报告写入临时文件中,然后将该临时文件里的内容打印到屏幕上。如果指定了- -outfile选项,则将临时文件拷贝成 指定的文件。如果指定了选项- -email,则会删除临时文件
- -email打印报告后,将结果发送到指定的邮箱。该选项需要使用/usr/sbin/目录下的sendmail程序,因此无法在windows 平台下使用。/usr/sbin/sendmail可以符号链接到 qmail,或者任何其他能模拟sendmail -t方式的MTA程序。邮件来源是:mysqlreport,主题是:MySQL status report on HOST,HOST是mysqlreport所在的主机名,可能是读取到的- -host值,默认是localhost
- -flush-status打印报告后,运行FLUSH STATUS命令
- -relativemysqlreport通常产生从MySQL启动以来的状态报告。指定- -relative选项可产生相对于前次报告以来的相关报告。

 

如果选项参数是一个整数,程序每隔指定的秒数后再次产生一份状态报告,报告次数由- -report-count选项指定。默认产生1份相关报告。例如,指定- -relative的值为60,则会产生2份报告:第一份基本报告马上生成,第二份相关报告在60秒后生成。第二份报告中的数值和前面的那份相关。例如,前者总共有10.00k次查询,在这60秒的间隔时间里接受了新的1.00k次查询,则后者的总查询次数是1.00k而非11.00k次。

如果选项参数是本地文件列表(就像- -infile选项那样),程序会按照参数中文件的顺序来依次产生状态报告。文件列表中的文件应该以空格分隔。以文件产生时间依次排列文件就显得很重要,较早产生的文件应该放在列表的前面。第一个文件中必须有系统变量,例如:key_buffer_size、table_cache 等。每个文件中可以有多组”SHOW STATUS”的结果。注意:通过 “mysqladmin -r -i N extended” 产生的状态文件无法使用,因为 mysqladmin的-r参数已经令其产生了具有相对性的状态值了。

由于mysqlreport首先会把状态报告写到临时文件中,如果- -relative的参数是整数时,mysqlreport会显示它把文件写到哪了。那么就可以直接通过查看这些文件内容来观察服务器的状况

- -report-count生成N份相关的报告。本选项只有在同时启用- -relative选项后才有效。mysqlreport会自动产生N+1份报告:第一份基本报告,以及后面的N份相关报告
- -detach本选项使得mysqlreport派生新进程,从终端上脱离转入后台继续运行。派生新进程后,mysqlreport 会报告它把结果写入了哪个临时文件。本选项需要- -outfile或- -email中的一个,如果这两个选项都没有给出,则产生的临时文件就会被删除,因为自派生出新进程后,无法再将结果打印到终端屏幕上了。本选项如果和- -relative选项一起使用的话就更有意义了,这样mysqlreport就能定时报告信息,而无需人工干预获得报告。例如使用如下命令,就能让mysqlrepot隔一个小时再次产生一次报告,并将结果发送到指定的信箱:perl mysqlreport - -relative=3600 - -detach - -email=host@domain.com。一个小时候后,mysqlreport通过email发送报告,删除临时文件,并且干净地终止
- -help打印帮助信息
- -debug打印调试信息

使用mysqlreport的简单例子
1.连接远程数据库192.168.12.14
perl mysqlreport - -host=192.168.12.14 - -user=db_user - -password=db_user_password

2.通过本地UNIX域套接口文件/data/mysql_data/mysql.sock连接本地数据库
perl mysqlreport - -user=root - -password=root_password - -socket=/data/mysql_data/mysql.sock

3.将输出报告写入文件/data/mysql_data/report/mysqlreport.txt
perl mysqlreport - -user=root - -password=root_password - -socket=/data/mysql_data/mysql.sock - -outfile=/data/mysql_data/report/mysqlreport.txt

posted on 2012-08-02 08:48  蚂蚁跳楼  阅读(438)  评论(0编辑  收藏  举报