slim入門:Dockerで構築したMariaDBでGeneral query logを出力する

スポンサーリンク
slim入門:Dockerで構築したMariaDBでGeneral query logを出力する 環境構築
slim入門:Dockerで構築したMariaDBでGeneral query logを出力する
この記事は約6分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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は、ログに記録する対象から除外するステートメントを指定するために使用されます。この設定を使用すると、指定したステートメントが実行された場合にはログに記録されず、ログの記録対象から除外されます。

slavespは、ログに記録されないように指定されたステートメントの一部です。

  • slave: slaveは、レプリケーションに関連するステートメントを指定します。レプリケーションは、データベースのマスターサーバーからスレーブサーバーにデータを複製するプロセスです。slaveを指定することで、レプリケーション関連のステートメント(レプリケーションの開始や停止など)がログに記録されなくなります。
  • sp: spは、ストアドプロシージャ(Stored Procedure)に関連するステートメントを指定します。ストアドプロシージャは、データベース内で事前に定義された手続き(プロシージャ)であり、複数のSQLステートメントをまとめて実行するために使用されます。spを指定することで、ストアドプロシージャの実行に関連するステートメントがログに記録されなくなります。

この設定を使用することで、レプリケーションやストアドプロシージャに関連するステートメントがログに表示されず、ログの可読性を向上させることができます。ただし、ログが特定の操作についての情報を欠落させるため、注意が必要です。

おわりに

今日は、MariaDBでGeneral query logを出力する方法についてご紹介しました。

どんなクエリーが発行されているかを調べるときには便利だと思いますので、覚えておいて損はないと思います。ただ、容量を圧迫しがちなので、その点には留意が必要です。

本記事でご紹介したソースは、下記のリポジトリにあります。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

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