mysql_explain_log

1) 一般ログの全てのSELECTとUPDATE文の抽出
2) MySQLに接続した上で、1)で抽出したSQL文をEXPLAINで実行する。
この時UPDATE文は同等の検索処理を行うSELECT文に変換。
3) EXPLAINの実行結果を要約し、牽引検索の回数や全表検索になったSQL文
などを表示する。

mysql_explain_logを試そうと思いましたが、MYSQL5.1からインストールされないようなので
MYSQL5.0xxをダウンロードしてコピーして利用してみました。


mysql_explain_log (a third-party program) is no longer included in MySQL distributions.

mysql-5.0.83-linux-i686-icc-glibc23.tar.gz

[root@colinux bin]# pwd
/usr/local/src/mysql-5.0.83-linux-i686-icc-glibc23/bin
[root@colinux bin]# cp -p mysql_explain_log /usr/local/mysql/bin/
[root@colinux bin]#

my.cnfにlog=の設定が無かったので、まず最初に設定を入れて再起動した後に
幾つかコマンドを実行してみました。

generallog

DBDやDBIが無かった….. まずインストールしないと利用出来ないのでインストールしました。

1) DBIをyumでインストール

[root@colinux src]# yum -y install perl-DBI
fedora 100% |=========================| 2.1 kB 00:00
updates 100% |=========================| 2.3 kB 00:00

dbi

2) DBDをyumでインストール

[root@colinux DBD-mysql-4.011]# yum install perl-DBD-MySQL
Setting up Install Process
Parsing package install arguments
Resolving Dependencies

dbd

さて実行しようと思いましたが、以下のエラーが出たので

[root@colinux data]# mysql_explain_log /usr/local/mysql/data/mysql-general.log
explain_log provided by http://www.mobile.de
=========== ================================
Error: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

ユーザー、パスワード、socketの場所を変更して再実行しました。

vi /usr/local/mysql/bin/mysql_explain_log

$Param->{host}=”;
$Param->{user}=’root’;
$Param->{password}=’password’;
$Param->{PrintError}=0;
$Param->{socket}=’/tmp/mysql5.1.sock’;

以下のような結果が表示されました。
[root@colinux data]# mysql_explain_log /usr/local/mysql/data/mysql-general.log

mysql_explain1