amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

MySQL SQL ログの残し方

調べた動機

ストアドプロシージャの実行結果をログで確認したかったのだが、そもそも MySQL のログの保存の仕方がわかっていなかったので、確認してみました。
設定の方法と設定内容の確認方法をメモしています。

設定

my.cnf に設定する方法

SQL ログをファイルに保存する設定

[mysqld] セクションに追記する。

general_log=1
log_output=FILE
general_log_file='/var/lib/mysql/xxxxxx.log'

SQL ログをテーブルに出力する設定

[mysqld] セクションに追記する。

general_log=1
log_output=TABLE

テーブルに出力した場合の SQL ログの確認は mysql にログインして確認する。
コマンドは別の個所に記載する。

SQL コマンドで設定

SQL ログをファイルに出力する設定

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/var/lib/mysql/xxxxxx.log';

SQL ログをテーブルに出力する設定

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE'

SQL ログの出力を停止する設定

SET GLOBAL general_log = 'OFF';

SQL ログの確認方法

ファイルに出力された SQL ログの確認

tail や less などで確認する。

tail -100 /var/lib/mysql/xxxxxx.log'

テーブルに出力した SQL ログの確認

※ たくさん出力出力されるので、表示行数とかは絞ったほうがいい。 以下の例では event_time で時間の古い順にソートして、先頭から10件を表示。

SELECT * FROM mysql.general_log order by event_time LIMIT  0, 10;

ログ出力設定の確認

ログ出力の有効・無効

SELECT @@GLOBAL.general_log;
  • 0 だったら無効
  • 1だったら有効

ログ出力がファイルの場合の保存先

SELECT @@GLOBAL.general_log_file;

ログの出力先

SELECT @@GLOBAL.log_output;
  • FILE:ファイル
  • TABLE:テーブル (DB内に出力)