調べた動機
ストアドプロシージャの実行結果をログで確認したかったのだが、そもそも 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内に出力)