MySQLにおけるログとは一体なんでしょうか?初めのうちはあまり触れる機会がない機能ですが、本格的にMySQLを使ってデータベースの運用を行う上ではぜひ知っておきたいポイントです。ただ、ログにはいくつかの種類があるため、それぞれの種類やメリットについて理解するのがややこしく、ついつい理解するのを後回しにしてしまったという方も多いはず。
そこで本コラムでは、MySQLのログについて、できるだけ丁寧かつ分かりやすく解説をしていきます。
- MySQL ログの概要
- MySQL ログのメリット
- MySQL ログ5種類の違い
MySQL ログとは?
MySQLのログについて、まずは大まかな内容を理解していきましょう。MySQLのログとは、MySQLを使用した際、ユーザがおこなった何かしらの作業が自動的にロギングされるもののことを言います。
ここで「何かしら」とぼかした言い方をするのは、MySQLのログにいくつかの種類があり、それぞれのログによって、記録される対象が異なるからです。これは一見、ややこしく見えるかもしれませんが、確認したい内容によって参照すべきログがすでに仕分けられているということになるので、MySQLのログに慣れてしまえばとても便利です。
MySQL ログのメリット
先ほども述べた通り、MySQLのログは目的ごとによって記録されるログの種類が異なるため、確認する際にとても便利です。たとえばエラーについてのログはエラー用のログに記録され、MySQLで入力したクエリに関しては、クエリ用のログに記録されるといった形です。このようなメリットがあるMySQLのログですが、ほかにも利点があります。それは、以下の3点です。
- システムエラーのデバッグに有効
- セキュリティを担保するのに有効
- データベースが破損した際の復旧に有効
それぞれのメリットについて詳しく見ていきましょう。
システムエラーのデバッグに有効
後ほど詳しく解説しますが、MySQLのログにはエラーを記録することが専門のログファイルが存在します。このログには、MySQLの起動〜停止中のすべてで発生したエラーを随時記録していく機能があります。MySQL上でエラーが起こった場合、なかなか確認することができないと思われているかもしれませんが、このエラー専用のログを見ることによって、ある程度、エラーの種類や発生源を分析することが可能です。
ヒントが何もない状態でデバッグをおこなうのは非常に骨の折れる作業ですが、エラー専用のログがあれば、何がエラーの原因となったのか調べることができるでしょう。
セキュリティを担保するのに有効
データベースを保有するWebサイトやアプリケーションをインターネット上に公開した際、常に外部からの攻撃などに気を使わなければなりません。しかし、実際にはどうやって気を遣えばいいのでしょうか。外部からのデータベースアクセスを見つけるにはどうすればいいのでしょうか。
そんなときに役立つのがログです。ログにはデータベースへのアクセスや内部からの操作、Webサイトへのアクセス記録やアプリケーションの利用状況など、さまざまな情報を記録することができます。このログをチェックし、セキュリティ上・サイト、アプリケーション上の問題がないかどうかを確認する行為をログ監視と言います。
こまめにログ監視をおこなうことによって、データベースへの不正アクセスを含む問題を早期発見することができます。また、それにともないセキュリティを担保することができるようになるのです。ログを使いこなすことで、デバッグのほかにセキュリティ面を守るためにも重要な役割を果たすことができるのです。
データベースが破損した際の復旧に有効
ログのなかにはMySQLにおけるデータ変更の記録について、バイナリでログへ出力するものもあります。たとえばテーブルを作成したり、テーブルデータを変更したりした際に、データベースの変更をロギングすることができるということです。このロギングのことをイベントと呼びます。
ログがあることによって、もしデータベースが破損してしまったり、取り返しのつかない変更を行ってしまった際にも、元通りの状況に復旧できる可能性があるのです。ログはユーザの作業を記録するという役割以外にも、データベース変更を記述するイベントを格納するという役割を果たしているのです。
MySQL ログの種類
ここからは全5種類にわたるMySQLのログについて、それぞれの特徴を確認していきましょう。MySQL ログの種類は以下の通りです。
- 一般クエリログ
- スロークエリログ
- バイナリログ
- リレーログ
- エラーログ
各種類についてそれぞれ見ていくことにしましょう。
一般クエリログ
一般クエリログは、サーバが実行したすべてのSQLクエリを記録するログのことです。また、実行されたSQLクエリ以外にも、サーバに接続されている時間や接続しているユーザなどがログに出力されていきます。文字通りすべての実行クエリが記録されるため容量が大きくなりやすいという特徴があります。そのため初期段階では、記録されない設定となっています。
スロークエリログ
スロークエリログは、サーバが処理をするのに時間がかかってしまったSQLクエリを記録するログのことです。こちらのログには、何秒以上の時間がかかったSQLクエリを記録するか設定することができます。たとえば「実行に1秒以上かかったSQLクエリを記録する」などの設定をおこなうことができるということです。スロークエリログを使えば時間がかかるSQLクエリを調べることができるため、サーバのパフォーマンス評価をおこなうことが容易になります。こちらも初期段階では、記録されない設定となっています。
バイナリログ
バイナリログは、MySQLによって行われたデータの変更について記録するログのことです。またの名を「バックアップログ」ともいい、文字通りバックアップを取るために用いられています。メインデータベースサーバとスレーブ(サブデータベースサーバ)のレプリケーションをおこなう際にも用いることができるため、覚えておきましょう。こちらも初期段階では、記録されない設定となっています。
【関連記事】
▶︎MySQLのレプリケーションとは?丁寧解説で概要を理解しよう!
リレーログ
リレーログは、いくつかのMySQLを使い、相互のデータ同期をおこなう際に用いられるログ</strongのことです。メインデータベースサーバとスレーブでレプリケーションをおこなうことをイメージしてください。メインデータベースサーバではデータ変更情報はバイナリログに記録されますが、スレーブにはこのリレーログが用いられます。こちらも初期段階では、記録されない設定となっています。
エラーログ
エラーログは、MySQL上で発生したエラーを記録するログのことです。このログだけがMySQLのログの中で唯一、初期段階から記録する設定となっています。もし原因がわからないエラーが発生した場合には、エラーログを確認してみることをおすすめします。また、エラーログにエラーが記録される際にはエラー・警告・注意の3段階でエラー評価が為されます。ほかにもエラー発生日時などもエラーメッセージとともに記録されていく点が特徴です。
まとめ
本コラムでは、MySQLのログについて、できるだけ丁寧かつ分かりやすく解説をしていきました。MySQLのログについて知っておくことで、セキュリティ面での安全性を担保できたり、データベースサーバが故障した際に復旧することができたりと、さまざまなメリットがあるということがわかっていただけはず。MySQLの扱いに慣れてきたら、MySQLのログをチェックしてみることをおすすめします。
【関連記事】
▶︎MySQLのupdateでselectした結果を使う方法 サブクエリで自己テーブル更新も可能
▶︎【MySQL】BOOLEAN型の扱いを徹底解説!(tinyint/bit)