进行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将在用户回车后提示输入密码 |
- -host | MySQL服务器地址 |
- -port | MySQL服务器的开发端口 |
- -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命令 |
- -relative | mysqlreport通常产生从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