Posted at

MySQL の Slow Log の log_output=table でも mysqldumpslow で解析したい

More than 1 year has passed since last update.

mysqldumpslow は log_output=file で出力されたファイルしか受け取りません。

私が今使っている GCP の Cloud SQL だと、slow log をlog_output=table でしか受け取れません。

そこで、mysql.slow_log テーブルからデータを取得して、log_output=file で吐くログと同じ形式にします。

mysql -h [host] -u[user] -p -D mysql -s -r -e "SELECT CONCAT( '# Time: ', DATE_FORMAT(start_time, '%y%m%d %H%i%s'), '\n', '# User@Host: ', user_host, '\n', '# Query_time: ', TIME_TO_SEC(query_time), ' Lock_time: ', TIME_TO_SEC(lock_time), ' Rows_sent: ', rows_sent, ' Rows_examined: ', rows_examined, '\n', sql_text, ';' ) FROM mysql.slow_log" > /tmp/mysql.slow_log.log

これで、以下のようにして slow log を解析できます。

mysqldumpslow /tmp/mysql.slow_log.log

https://cloud.google.com/sql/docs/mysql-flags?hl=ja#tips-general-log


参考資料

MySQLでmysql.slow_logテーブルをslow queryログファイル形式でダンプする|てくめも@ecoop.net

このサイトのコマンドは↑"や'が置換されてしまっていてコピペすると動きません。そのためこちらの記事を追加しました。

mysql.slow_logテーブルからmysqldumpslowする - Qiita

こちらの記事のコマンドは私の環境ではうまく動きませんでした。