MySQLのログの種類について知ろう

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 MySQL を利用したアプリケーションを構築・運用する上で知っておきたいのが、MySQLが出力するログです。 アプリケーションで問題が発生した際に原因を解明するために頼りになるのがログファイルですし、障害からの復旧やレプリケーション機能を利用する際にもログが重要な役割を果たします。 様々なログについてここでは解説をします。

基本的なログ

 MySQL のログでまず抑えておくべきログは、下表の通りです。

名称 初期設定
エラーログ (Error log) YES
一般クエリログ (General query log) No
バイナリログ (Binary log) No
リレーログ (Relay log) No
スロークエリログ (Slow query log) No

エラーログ (Error log)

 エラーログは、MySQL の起動や実行中、停止の際に発生したエラーを出力するログです。 MySQL の初期状態で出力されるようになっています。 MySQL でエラーが発生した際には、まずはこのエラーログを確認すると良いでしょう。

一般クエリログ (General query log)

 一般クエリログは、MySQL サーバが実行した全ての SQL クエリを出力するログです。 MySQL サーバに接続した時間、接続元ユーザ、実行したSQL を出力します。 MySQL の初期状態では出力されない設定になっているので、必要であれば出力するように設定してください。
 一般クエリログの詳細については、別稿「MySQLで実行された全てのSQLを記録する「一般クエリログ」」で解説していますので参考にしてください。

バイナリログ (Binary log)

 バイナリログは、MySQL で行ったデータ変更情報をバイナリで出力するログです。 バイナリログはデータを復旧する際などに利用されます。 また、複数台の MySQL 間でレプリケーション(データ同期)を行う場合にはバイナリログが必須で、次で説明するリレーログと共にレプリケーション(データ同期)に利用されます。 バイナリログにはデータを変更した時間やタイミング情報が保存されているので、時間が古い方から順に実行していけばデータが復旧できるわけです。

リレーログ (Relay log)

 リレーログは、MySQL レプリケーションで複数の MySQL 間でデータ同期の設定をしている際に利用するログです。 リレーログはデータ同期を受ける側(スレーブ)となる MySQL に必要となります。 複数ある MySQL の中でデータを更新した MySQL (マスタ)ではバイナリログが出力されますが、そのバイナリログの内容をスレーブ側ではリレーログにコピーして受取ります。 リレーログにデータ更新情報を受け取ったら、そのリレーログの内容を基にデータを更新します。 そうすることで、複数台のデータが同一に保たれる仕組みです。

スロークエリログ (Slow query log)

 スロークエリログは、処理に時間がかかったSQLクエリを知らせてくれるログで、アプリケーションのパフォーマンスを評価するのにとても役に立ちます。 例えばログに出力する閾値を1秒で設定しておけば、結果を返却するまでに1秒以上かかったSQLクエリがログに出力されます。 なお、オプションとして log-queries-not-using-indexes というオプションがあり、このオプションを指定している場合は、SQLクエリによる検索でインデックスが利用されずにフルスキャンが発生したSQLクエリも出力するようにすることができます。 筆者は結合試験でこのログをとても気にするようにしていて、プログラマが効率の悪いSQLを実行していたり、テーブル設計でインデックスのパターンが抜け漏れていないかを確認するようにしています。 適切な開発工程でログが出力されるように設定して、アプリケーションのチューニングに役立てると良いでしょう。
 スロークエリログの詳細については、別稿「MySQLチューニングの基本「スロークエリログ」を知ろう!」で解説しています。

MySQL Enterprise 版のログ

 Oracle のサポートをえられる有償の MySQL Enterprise 版では、上記の基本ログに加えて下表のようなログを出力することができます。

名称
MySQL Enterprise Audit Log

MySQL Enterprise Audit Log

 MySQL Enterprise Audit のログ機能では、誰が何をしたのかを追跡できるようにするために、ログイン・ログオフの記録、データベースやテーブルへのアクセス記録、データベーススキーマの変更履歴などを記録することができます。 企業や組織に求められる厳しいセキュリティ基準やコンプライアンスに対応できる監査ログを記録できます。

サードパーティ・プラグインによるログ

 MySQL 標準のログについては上記で述べましたが、サードパーティのプラグインなどを導入することで吐かせる事ができるログがありますのでご紹介します。

名称 提供元 提供形態
監査ログ (MySQL AUDIT) mcafee オープンソース (GPL Version 2)

MySQL AUDIT (mcafee)

 セキュリティソフトで有名なマカフィー(mcafee)社がオープンソースで公開している監査ログ用のプラグインです。 ログイン・ログオフの記録や、データベースやテーブルの操作記録などを細かく記録することができます。 上で紹介した「MySQL Enterprise Audit Log」は Oracle 社の商用ライセンスでお金がかかりますが、予算やランニングコストを抑えたい場合には MySQL AUDIT は GPL ライセンスの範囲内で無償に使えますので、比較検討してみて損はないと思います。

おわりに

 「ログ」と一言で言っても、様々な役割や用途があることがお分かり頂けたでしょうか? アプリケーションを構築する上でどのログが必要で、どのような運用をする必要があるのかを考えるキッカケになれば幸いです。

MySQL 入門へ戻る

MySQLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca