こんにちは。よっしーです(^^)
今日は、MariaDBでGeneral query logを出力する方法についてご紹介します。
前提
この記事は下記の記事をベースにしています。
背景
ローカルで開発中にMariaDBにどんなクエリーを調べる必要があったので、General query logを出力したときの設定をご紹介します。
General query log
MySQL(およびMariaDB)のgeneral query log
は、データベースに対して実行されるすべてのクエリ(クライアントからのリクエスト)をログとして記録する機能です。このログには、クエリのテキスト、クエリの実行時刻、実行したユーザー、クライアントの接続情報などの情報が含まれます。
general query log
を有効にすると、データベースに対して実行されるすべてのクエリがログに記録されます。これには、SELECT、INSERT、UPDATE、DELETEなどのSQLステートメント、および管理コマンド(ALTER TABLE、CREATE TABLEなど)が含まれます。ログはテキストファイルとして保存され、指定された場所に追記されていきます。
注意: general query log
は本番環境で常に有効にしておくと、パフォーマンスの低下やディスクスペースの消費を引き起こす可能性があります。通常はトラブルシューティングやパフォーマンスの解析のために一時的に有効にすることをお勧めします。また、ログにはクエリのテキストが含まれるため、機密性の高い情報が漏洩する可能性があるため、注意が必要です。
修正内容
下記のファイルを更新、もしくは、作成します。下記の各セクションに各ファイルの修正内容を記載しています。
modified: app/mariadb/conf.d/master_replica.cnf
modified: app/mariadb_read/conf.d/read_replica.cnf
app/mariadb/conf.d/master_replica.cnf
9行目に追加します。
+general_log
app/mariadb_read/conf.d/read_replica.cnf
8行目に追加します。
+general_log
+log_disabled_statements='slave,sp'
動作確認
下記のコマンドを実行します。
make up
make migrate_up
下記のコマンドを実行します。
make login_mariadb
mariadb -uroot -p -Dsample -e 'select * from sample;'
下記のコマンドを実行します。
tail /var/lib/mysql/master1.log
下記のようにクエリーの発行が確認できれば成功です。
root@7b991f3af11a:/# tail /var/lib/mysql/master1.log
7 Execute INSERT INTO `schema_migrations` (version, dirty) VALUES (2, 0)
7 Close stmt
7 Query COMMIT
7 Prepare SELECT RELEASE_LOCK(?)
7 Execute SELECT RELEASE_LOCK('210980081')
7 Close stmt
7 Quit
230717 13:32:58 8 Connect root@localhost on sample using Socket
8 Query select * from sample
8 Quit
解説
app/mariadb/conf.d/master_replica.cnf
general_log
は、一般クエリログ(general query log)を有効にするための設定です。
log-basename
は、MariaDBがすべてのログファイル(一般クエリログ、スロークエリログ、エラーログ、バイナリログなど)に共通の接頭辞を使用するように設定します。一般的なクエリログのファイル名は、この接頭辞に拡張子 .log を追加することで作成されます。
app/mariadb_read/conf.d/read_replica.cnf
log_disabled_statements
は、ログに記録する対象から除外するステートメントを指定するために使用されます。この設定を使用すると、指定したステートメントが実行された場合にはログに記録されず、ログの記録対象から除外されます。
slave
とsp
は、ログに記録されないように指定されたステートメントの一部です。
slave
:slave
は、レプリケーションに関連するステートメントを指定します。レプリケーションは、データベースのマスターサーバーからスレーブサーバーにデータを複製するプロセスです。slave
を指定することで、レプリケーション関連のステートメント(レプリケーションの開始や停止など)がログに記録されなくなります。sp
:sp
は、ストアドプロシージャ(Stored Procedure)に関連するステートメントを指定します。ストアドプロシージャは、データベース内で事前に定義された手続き(プロシージャ)であり、複数のSQLステートメントをまとめて実行するために使用されます。sp
を指定することで、ストアドプロシージャの実行に関連するステートメントがログに記録されなくなります。
この設定を使用することで、レプリケーションやストアドプロシージャに関連するステートメントがログに表示されず、ログの可読性を向上させることができます。ただし、ログが特定の操作についての情報を欠落させるため、注意が必要です。
おわりに
今日は、MariaDBでGeneral query logを出力する方法についてご紹介しました。
どんなクエリーが発行されているかを調べるときには便利だと思いますので、覚えておいて損はないと思います。ただ、容量を圧迫しがちなので、その点には留意が必要です。
本記事でご紹介したソースは、下記のリポジトリにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント