MySQLで全てのSQLログを出力する方法!(my.cnf・SQL)

MySQL MySQL

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」を使うことで、ログの有効化とパスの設定ができた。

コメント

タイトルとURLをコピーしました