2013年10月31日木曜日

一時的にMySQLでクエリログを取りたい時

とある事情でMySQLのクエリログが必要になって調べたのでメモ。

通常はmysqldの起動時に-l /path/to/logとかオプションを付けるけれど、MySQL 5.1.12から実行中のmysqldのグローバル変数(でいいのかな?)をいじることによってログ出力の有効/無効を切り替えれるそうな。



手元のMySQL 5.6.14で試してみた。
mysql> SET GLOBAL general_log = 'ON';
Query OK, 0 rows affected (0.00 sec)
とすると、データベースの実態が置かれているディレクトリにhostname.logというファイルが作られる。試した環境では/var/db/mysql/hostname.logとなって、その中身は
/usr/local/libexec/mysqld, Version: 5.6.14-log (Source distribution). started with:
Tcp port: 0  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
こんな感じ。

一旦\qしてもう一度つないでみると、
/usr/local/libexec/mysqld, Version: 5.6.14-log (Source distribution). started with:
Tcp port: 0  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
131031 19:53:52    15 Quit
131031 19:54:02    16 Connect   root@localhost on
                   16 Query     select @@version_comment limit 1
こんな感じに。

ログを取るのをやめたいときは
mysql> SET GLOBAL general_log = 'OFF';
Query OK, 0 rows affected (0.00 sec)
でOK。