前回記事:MySQLでよく使うコマンド一覧とオプションまとめでは、MySQLを始める際に覚えておきたい基本のコマンド30種類をご紹介しました。
今回は、MySQLのログファイル4種類の設定方法と確認方法についてご紹介したいと思います。
MySQLのバージョン:SQL Server 5.7
目次
1.1 ログファイルの種類
1.2 ログファイルの保存場所
1.3 ログ監視や解析のメリット
2.1 一般クエリログとは
2.2 一般クエリログの出力設定
2.3 一般クエリログの確認と読み方
3.1 スロークエリログとは
3.2 スロークエリログの出力設定
3.3 スロークエリログの確認と読み方
4.1 バイナリログとは
4.2 バイナリログの出力設定
4.3 バイナリログの確認と読み方
1.MySQLのログファイルの種類と保存場所
1.1 ログファイルの種類
MySQL Server 5.7のログファイルには、次の4種類があります。
・一般クエリの実行ログ(General query log)
・スロークエリの発生ログ(Slow query log)
・バイナリログ(Binary log)
・エラーログ(Error log)
このうち「スロークエリの発生ログ」と「エラーログ」については、デフォルトで記録が設定されています。残りの「一般クエリの実行ログ」と「バイナリログ」については、設定の追加が必要です。
ログファイルの設定については、共通の設定ファイルに記述されています。設定ファイルの場所については、後ほどログファイルの保存場所にてご紹介します。
1.2 ログファイルの保存場所
ログファイルの保存場所は、設定ファイル中の「datadir」で定義されています。
■UNIX/Linux系の設定ファイルの場所
/etc/my.cnf
■Windowsの設定ファイルの場所
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
図はWindows版設定ファイルの例です。デフォルトでは次の場所になっています。
C:\ProgramData\MySQL\MySQL Server 5.7\Data
上の黄色くマークされているところにログファイルの出力場所が記載されており、下の赤く囲んでいるところにロギングの設定が記述されています。
なおUNIX/Linux系の場合、「datadir」のデフォルトは次の通りです。
/var/lib/mysql
1.3 ログ監視や解析のメリット
MySQLだけでなくデータベース共通にいえることですが、ログ監視を行うことでセキュリティの強化(外部からの攻撃、内部からの不正操作や、情報漏洩などの対応)を図ることができます。
またシステム障害が起こった際には、エラーの発生原因究明などに役立ちます。
さらにMySQLの場合、最悪データベースが破損してしまってもバイナリログからデータを復旧することが可能というメリットがあります。
2.一般クエリログの設定と確認
2.1 一般クエリログとは
一般クエリログとは、実行したSQLクエリの履歴が全て記録されていくログです。サイズが大きくなりやすいためデフォルトでは出力しない設定となっていますが、障害対応などで重要な役割を果たすことも多く、システムが稼働する際にはよほどでなければ出力するケースが多いようです。
2.2 一般クエリログの出力設定
一般クエリログの出力設定は、下図の場所で行います。
設定が可能な項目は、3つあります。
・log-output
・general-log
・general_log_file
■log-output
この項目では、ログの出力方法を設定します。設定可能な出力方法は、次の3つです。
・TABLE・・・テーブルに出力する
・FILE・・・ファイルに出力する
・NONE・・・どちらにも出力しない
特に設定しなかった場合、デフォルトではFILEになります。
これは一般クエリログだけでなく、同項目で設定するスロークエリログにも反映されます。
■general-log
これはログ出力の有無を設定する項目であり、次の2つの値を設定可能です。
・0・・・出力しない
・1・・・出力する
デフォルトでは、「0(出力しない)」が設定されています。
■general_log_file
出力するログファイルの、ファイル名を設定します。
2.3 一般クエリログの確認と読み方
「datadir」に設定したディレクトリに「general_log_file」に設定した名称で、図のような内容のテキストファイルが作成されました。
■ログ1行目:MySQLバージョン情報など、開始情報が出力されます。
■ログ2行目:ポート番号やパイプ名などが出力されます。
■ログ3行目:ログ本文の項目見出しが出力されます。
■ログ4行目以降:ログ本文が出力されます。
左から、日時、コマンドのID、実行内容が出力されます。
3.スロークエリログの設定と確認
3.1 スロークエリログとは
スロークエリログとは、実行に時間のかかったクエリがあった際に記録されるログです。パフォーマンス向上のための原因分析の場面などで役立ちます。
3.2 スロークエリログの出力設定
先ほどの一般クエリログと同じ項目の後半部分が、スロークエリログの設定箇所です。
設定が可能な項目は、4つあります。
・log-output
・slow-query-log
・slow_query_log_file
・long_query_time
■log-output
一般クエリログと共通です。
■slow-query-log
一般クエリログと同じく、ログ出力の有無を設定する項目です。
デフォルトでは、「1(出力する)」が設定されています。
■slow_query_log_file
こちらも同じく、出力ファイルのファイル名を設定します。
■long_query_time
ここで設定した値(単位:秒)よりも処理に時間がかかったクエリを、出力対象にします。
デフォルトでは10秒が設定されています。
3.3 スロークエリログの確認と読み方
「datadir」に設定したディレクトリに「slow_query_log_file」に設定した名称で、図のような内容のテキストファイルが作成されました。
■ログ1行目:MySQLバージョン情報など、開始情報が出力されます。
■ログ2行目:ポート番号やパイプ名などが出力されます。
■ログ3行目:クエリの実行時間、テーブル等がロックされていた時間、処理対象の行数などが出力されます。
■ログ4行目以降:実行されたクエリの内容(SQL文)が出力されます。
サンプルの図では特に問題が発生していないため、エラーは出力されずに毎回のサーバスタート情報が並んでいる状態となっています。
4.バイナリログの設定と確認
4.1 バイナリログとは
バイナリログはバックアップログとも呼ばれ、データ変更の情報をバイナリ情報で記録しています。いざという時はバイナリログからデータを復元できる内容となっており、レプリケーションにも使用されています。
4.2 バイナリログの出力設定
バイナリログの出力については、一般クエリログやスロークエリログの次にある「Binary Logging」に設定します。
設定が可能な項目は、4つあります。
・log-bin
・log_bin_index
・max_binlog_size
・expire_logs_days
■log-bin
一般クエリログなどと同じくログ出力の有無を設定する項目ですが、こちらでは数値ではなくファイル名を指定することで、ログの出力が開始されます。
デフォルトでは、項目自体がコメントアウトされています。
■log_bin_index
バイナリログを管理するためのインデックスファイルの名前を指定します。
■max_binlog_size
ログファイルの最大サイズを指定します。
■expire_logs_days
ログファイルを保存しておく期間(単位:日)を設定します。
4.3 バイナリログの確認と読み方
バイナリログはその名の通り中身はバイナリファイルです。簡単に読み解けない状態となっているため、今回は割愛します。
5.エラーログの設定と確認
5.1 エラーログとは
エラーログとはサーバの起動や停止の情報と合わせて、発生したエラーや警告の履歴が出力されるログファイルです。
5.2 エラーログの出力設定
バイナリログの出力については、一般クエリログやスロークエリログの次にある「Binary Logging」に設定します。
設定を行う項目は、1つです。
・log-error
■log-error
エラーログのファイル名を設定します。
5.3 エラーログの確認と読み方
「datadir」に設定したディレクトリに「log-bin」に設定した名称で、図のような内容のテキストファイルが作成されました。
左から、日時、コマンドのID、警告レベル、内容が出力されます。
警告レベルには、次の3つがあります。
[Error]・・・エラー
[Warning]・・・警告
[Note]・・・注意
サンプルの図ではエラーは発生しておらず、警告と注意が発生しています。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら