MySQLでログファイルをチェックするには?MySQLで使えるログは4種類

MySQLでログファイルをチェックするには?MySQLで使えるログは4種類のアイキャッチイメージ

MySQLはログファイルを出力する


Webシステムの構築にはWebサーバーと連携して動作するデータベース管理ソフトが欠かせません。特にオープンソースのMySQLおよび互換性があるmariadbは、その使い易さからWebサーバーと連携して使われることの多いデータベース管理ソフトです。

しかしデーモンとして実行されるMySQLやmariadbの動作状況を直接チェックする手段はありません。そこでMySQLやmariadbのログファイルをチェックすることで動作状況をチェックします。

まずはMySQLやmariadbでログファイルをチェックするために知っておきたいログの基本について解説します。

そもそもログとは

ログファイルとは、OSやアプリケーションなどがその動作状況や障害情報などを、一定のフォーマットで時系列に書き出したテキストファイルです。動作状況や障害情報などのイベントにつき1行で書かれているのが一般的で、日時と分類コード、発生内容などが記述されています。

なおログファイルのログは英語で書くとlogです。logを辞書で引くと木材という意味ですが、IT用語のログは木材のことではありません。航海日誌のことを英語でlogbookと言うことから、記録という意味でlogが使われるようになり、IT用語として使われるようになった言葉です。

ログファイルの場所

CentOSやUbuntuなどのLinuxでは、yumコマンドやaptコマンドなどで簡単にmariadbをインストールできます。そのようなmariadbのログファイルの場所は、いっしょにインストールされる設定ファイルに定義されているので特に設定する必要はありません。

例えばCentOSのyumコマンドでmariadbをインストールした場合、mariadbの設定ファイルが同時にインストールされます。この設定ファイルにログファイルの場所が定義されているのでチェックしてみてください。

ログファイルをチェックするには

先ほど紹介したCentOSのyumコマンドでインストールできるmariadbのログファイルはテキストファイルです。そのためmariadbのログファイルをチェックするには、エディタなどで開くことで読むことが可能です。

ただしデフォルトで使っていると詳細な実行状況は記録されていません。詳細な実行状況は記録するためには、MySQLやmariadbのログファイルの仕組みを理解し、設定方法を知らなければなりません。次からログの設定について詳しく解説します。

MySQLで使えるログは4種類


先ほどMySQLと互換性があるmariadbが書き出すログファイルの場所をチェックする方法を紹介しましたが、このログファイルに出力される情報はエラーメッセージだけではありません。

MySQLとmariadbでは、エラーメッセージの他に処理内容などを含む4種類のログを出力できます。

MySQLとmariadbのログの種類
・エラーログ
・通常のクエリログ
・スロークエリログ
・バイナリログ

次からこの4つのログについて紹介します。

デフォルトはエラーログ

インストールしたばかりのMySQLやmariadbをそのまま実行した際に出力されるデフォルトのログがエラーログです。エラーログでは全ての致命的エラーのメッセージなどがログファイルに出力されます。

ただしエラーログではMySQLやmariadbで障害が発生したことが解る程度で、不具合の詳細を調べることはできません。WordPressのような障害が滅多に起きないシステムで使えるログと考えてください。

通常のクエリログ

通常のクエリログでは、先ほど紹介したエラーログに加えてMySQLやmariadbで実行されたクエリーの情報もログファイルに書き出します。

データベースと連携しているWebシステムで不具合が発生した場合、どのデータが原因で起きたかを調べなければなりません。そのような場合、不具合発生直前に実行しているクエリーが解れば不具合の解説に役立ちます。

通常のクエリログを設定するには、mysqldの起動オプションとして「–general-log」を指定するか、/etc/my.cnfなどの設定ファイルで「general_log=1」を設定してください。

スロークエリログ

先ほど紹介した通常のクエリログは全てのクエリーの情報を書き出すため、システムによっては短期間で巨大なログファイルができてしまいます、それを日常的に解析するのは簡単ではありません。

スロークエリログを設定することで、エラーログに加えて時間がかかるクエリーの情報を書き出します。そしてこのログを解析することで長い時間を要するクエリーをチェックでき、システムのパフォーマンスの改善が可能です。

スロークエリログを設定するには、mysqldの起動オプションとして「–slow-query-log」を指定するか、/etc/my.cnfなどの設定ファイルで「low_query_log=1」と「long_query_time」にチェックする時間を秒単位で指定します。

また「slow_query_log_file」で通常のログファイルとは別のファイルに書き出すことも可能です。

バイナリログ

バイナリログとは、ログからデータベースを復旧するために利用できる情報を書き出したファイルです。テキストファイルではないので、エディタで内容をチェックできない点に注意してください。

例えば1日1回バックアップしているデータベースのサーバーが突然停止した場合、バックアップした時点までは復元できますが、その時点からサーバーが停止した時刻までのデータが失われてしまいます。

そこでログファイルに書き出した情報を利用して復元できるようにしたのがバイナリログです。

バイナリログを利用するには、mysqldの起動オプションとして「–log-bin」でファイル名を指定するか、/etc/my.cnfなどの設定ファイルで「log-bin」にファイル名を設定します。

MySQLのlog_error設定例


MySQLやmariadbでは、ログを含む動作に関する設定を、インストール時に同時に作られる設定ファイルに記述します。

次からMySQLやmariadbの設定ファイルで、ログファイルを設定する手順を、Linuxのサーバーとして使われることの多いCentOSの例を用いて紹介します。

CentOSの設定ファイル

Webサーバーなどでよく使われるCentOSではMySQLの代わりにmariadbを標準でインストールでき、その設定ファイルは/etc/my.cnf.d/mariadb-server.cnfです。このファイルはテキストファイルなので、テキストエディタで編集できます。

まずは「[mysld]」を探してください。その下に次のようなログの設定があります。

CentOS 8.3の/etc/my.cnf.d/mariadb-server.cnfのデフォルト設定

上記の「log-error」でログを書き出すファイル名を指定しています。

設定ファイルを修正する

設定ファイルの修正手順を、デフォルトのエラーログから通常のクエリログに変更する手順を用いて紹介します。

まず通常のクエリログを出力するには「general_log=1」を/etc/my.cnf.d/mariadb-server.cnfに追加します。例えば、下記のように修正してください。

CentOS 8.3の/etc/my.cnf.d/mariadb-server.cnfの修正例

設定ファイルを変更したら、mariadbのデーモンを再起動します。suコマンドでrootに切り替えて次のコマンドでデーモンを再起動してください。

これでエラーログから通常のクエリログに変更されます。

MySQLのログの仕組みの理解を


MySQLやmariadbのようなデータベースは直接稼働状況をチェックできないので、ログファイルによる管理が欠かせません。

データベースと連携したWebシステムを管理するなら、MySQLのログの仕組みを理解するのが第一歩です。そして、ログファイルを活用してデータベースを管理できるエンジニアを目指しましょう。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。