MySQLで一般クエリログと呼ばれる、実行された全てのSQLを出力する方法について書いています。
設定ファイル(my.cnf)に記述して有効にする方法と、SQLを使って有効にする方法があります。
コマンドやSQLについては、MySQLのバージョン8.0.15で試しました。
設定ファイル(my.cnf)で有効にする
設定ファイル(my.cnf)で有効にするには、下記のように設定ファイルに追記します。
[mysqld]
general_log=1
general_log_file=/var/log/mysql/query.log
「general_log=1」で有効にしています。「general_log=0」で無効です。
「general_log_file」には、ログが出力されるファイルのパスを設定しています。
設定が終わったらMySQLを再起動してください。
MySQLが実行されるプログラムの処理や、実際にSQLを実行すると、下記のように設定したファイルにログが出力されます。
/usr/sbin/mysqld, Version: 8.0.15 (MySQL Community Server - GPL). started with:
Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
2023-05-10T02:54:33.281184Z 17 Query SELECT VERSION()
2023-05-10T02:54:33.301629Z 18 Query SELECT st.* FROM performance_schema.events_statements_current st JOIN performance_schema.threads thr ON thr.thread_id = st.thread_id WHERE thr.processlist_id = 17
SQLで有効にする
SQLで有効にすることもできます。
下記のSQLを実行すると、全てのログが出力されるようになります。
SET GLOBAL general_log = 'ON';
ログの出力先を変える
ログの出力先を変えるには、下記のようにパスを指定します。
SET GLOBAL general_log_file = '/var/log/mysql/test.log';
実行すると、指定したパスにログファイルが出力されて、書き込まれるようになります。
SQLで無効にする
SQLで無効にするには、ONにしてた値を「OFF」に設定します。
SET GLOBAL general_log = 'OFF';
全てのクエリを出力する方法のまとめ
今回はMySQLで全てのクエリを出力する方法について書きました。
記事の内容をまとめると、下記のようになります。
・設定ファイル(my.cnf)のgeneral_logに「1」を設定することで有効化できた。
・設定ファイル(my.cnf)のgeneral_log_fileに出力されるファイルのパスを指定した。
・SQLでも「SET GLOBAL」を使うことで、ログの有効化とパスの設定ができた。
・設定ファイル(my.cnf)のgeneral_log_fileに出力されるファイルのパスを指定した。
・SQLでも「SET GLOBAL」を使うことで、ログの有効化とパスの設定ができた。
コメント