👻

Docker上のMySQLでサクッとログ確認する方法

2024/01/31に公開

はじめに

どうも、うみぶどうです。エックスポイントワンで働いているエンジニアです。
2024年もよろしくお願いいたします。

今回はデータベースに関する記事です。
Dockerコンテナで動かしているMySQLのログを確認する方法をまとめます。

本記事では構築については触れません。
MySQLで扱えるログにはいくつか種類がありますが、
トランザクション開始やコミットなども含め、多くの情報を確認できる
クエリログ(一般クエリーログ、The General Query Log)に言及します。

既にコンテナでMySQLを動かしている前提で、
以下のステップでログを取得します。

  • ログを有効にする
  • ログファイルを閲覧する

本記事の内容は、テスト段階で何度もMySQLの再構築を繰り返す必要があり、
かつログを確認したいような時に有効かと思います。

一方で、注意すべき点としてログに記載される情報量が多いことが挙げられます。
容量を逼迫する可能性もあり、クエリログを常に有効にしておくのは勧められません。

ログ確認

ステップ1-1: ログが有効か確認する

設定が記述されたファイル my.cnf を直接編集せずとも、
SQLにより、手軽に設定を確認・変更することができます。

SHOW VARIABLES LIKE 'general_log%';

実行することで、以下の設定値が表示されます。

  • general_log (ON/OFF でログ機能が有効かどうかを示す)
  • general_log_file (ログファイルのパスを示す)

デフォルトではログ機能をOFFにしていることが多いと思われます。

ステップ1-2: ログを有効にする

ログ機能がOFFであれば以下のSQLで有効にしましょう。
既にONであればステップ2に進みましょう。

SET GLOBAL general_log = 'ON';

ステップ2: ログファイルを閲覧する

ログ機能を有効にした後でDB操作を行うと、先に確認した
general_log_file に示されたファイルにログが貯まっていきます。

後から内容を精査したい状況を想定して、
docker内部のログファイルを、ホスト側にコピーする方法を紹介します。

% docker cp <コンテナ名>:<ログファイルのパス> <コピー先のパス>

ホスト側で上記コマンドを実行することで、dockerの内側からログファイルをまるっとコピーします。
コピー後はお好みの方法で閲覧してください。

確認したいログ内容の場所が特定できている場合や、複数のログを比較する必要がない場合は不要かもしれませんが、調査のために複数ログを残しておきたい場合には便利です。

最後に

細かいログの確認が問題解決に役立つという場面も、時にはあるのではないでしょうか。
本記事が誰かの役に立つ機会があればいいなと願っています。
以上です。

エックスポイントワン技術ブログ

Discussion