MariaDB(MySQL) での各種ログ出力設定

スポンサーリンク

概要

ログと言ってもいくつか存在し、今回は、私自身が運用でよく使用する以下のログ設定をそれぞれ行っていきたいと思います。

ログ名説明
errorログサーバーから出力されるエラーメッセージを記録するログになります。
slow queryログ処理に時間のかかったクエリを記録するログになります。
queryログ実行されたすべてのSQLを記録するログになります。
バイナリログデータの登録/更新のSQL文だけをバイナリ形式で記録するログになります。(※データ復旧やレプリケーション設定時に使用されます。)

※参照
https://mariadb.com/kb/ja/overview-of-mariadb-logs/

errorログ設定

※サーバの起動や停止の情報に加え、発生したエラーや警告が出力されるログファイルとなります。

出力設定
※基本的にはデフォルトで常に有効となってますので、設定が入っている事を確認します。


$ vim /etc/my.cnf

log-error = /var/log/mysql/mariadb.log

※log-warningsを設定することで、警告レベルのログも出力することができます。

slow queryログ設定

サーバー運用時によくお世話になるログで、設定した処理時間を超えたクエリを出力したログとなります。

my.cnfを開き、設定を行っていきます。


$ sudo vim /etc/my.cnf
[mysqld] 
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log 
long_query_time = 1 
log_queries_not_using_indexes = 1
設定設定内容
slow_query_log出力設定。0で無効、1で有効
slow_query_log_fileログの出力先ファイル名
long_query_time何秒以上のクエリをログに出力するか(※1秒以下も設定する事ができます。例)0.3)
log_queries_not_using_indexesインデックスが使用されなかったログも出力

設定が完了したら再起動を行い、設定を反映させます。


$ sudo systemctl restart mariadb.service

また、mysqlのコマンドラインモードからも実行する事ができます。
※再起動するとリセットされますので、一時的な負荷調査を行う場合には向いているのですが、永続的な設定を行いたい場合には、my.cnfへの設定が必要となりますので、ご注意ください。


MariaDB [(none)]> set global slow_query_log_file = '/var/log/mysql/slow.log';
MariaDB [(none)]> set global long_query_time = 1;
MariaDB [(none)]> set global slow_query_log = ON;
MariaDB [(none)]> set global log_queries_not_using_indexes=1;

queryログ

実行されたすべてのSQLを記録するログになりますので、アクセス数が多かったり、発行されるSQLが多いサイトの場合には、ファイル容量が膨大になる事もあります。
そのため、注意が必要で、開発時のデバック用であったり、本番運用時に一時的に調査をする場合に、設定するぐらいでの利用の方がいいかもしれません。
もし、運用上出力設定を入れた状態で利用する場合には、ログローテーションの設定を入れる事をおすすめします。
※ログローテーションの設定は別の記事で記載しようかと思ってます。

my.cnfを開き、設定を行っていきます。


$ sudo vim /etc/my.cnf
[mysqld] 
general_log = 1
general_log_file = "/var/log/mysql/query.log"

設定が完了したら再起動を行い、設定を反映させます。


$ sudo systemctl restart mariadb.service

また、mysqlのコマンドラインモードからも実行する事ができます。
※再起動するとリセットされますので、一時的な負荷調査を行う場合には向いているのですが、永続的な設定を行いたい場合には、my.cnfへの設定が必要となりますので、ご注意ください。


MariaDB [(none)]> set global general_log_file = "/var/log/mysql/query.log";
MariaDB [(none)]> set global general_log = 1;

バイナリログ

データの登録/更新のクエリだけをバイナリ形式で記録し、データ復旧やレプリケーション設定時に使用されます。

・データ復旧の際には、データのフルバックアップを1日単位で取得しているシステムに障害が発生し、データの復旧を行う場合に、フルバックアップ取得から障害発生時までの差分データを復旧する場合に使用します。
・レプリケーションの際には、マスターとスレーブが同期をとるための情報として使用されます。

それでは、my.cnfを開き、設定を行っていきます。


$ sudo vim /etc/my.cnf
[mysqld] 
log-bin = mysql-bin
expire_logs_days = 7

他にもオプションはありますが、今回はシンプルに出力先と保持期間のみ設定します。

設定設定内容
log-bin

ログの出力先ファイル名を指定します。
上記の設定のようにパスを省略すると/var/lib/mysql/配下に出力されます。
システムに関わるログとなるため、省略してた方が、用途がすみ分けしやすいのかなと思います。

expire_logs_days

バイナリログの保持期間となります。

今回の設定のように7を設定すると、7日間分のバイナリログが保存されます。
※MySQLだとバージョン8.0.3以降から非推奨になるみたいなので注意が必要です。

また、expire_logs_daysについては、mysqlのコマンドラインモードからも実行する事ができます。


MariaDB [(none)]> set global expire_logs_days = 30;

最後に
上記で設定したログの設定値は、mysqlのコマンドラインモードから確認できますので、設定値を確認したい場合は、以下のコマンドにてご参照ください。


MariaDB [(none)]> show variables like '%log%';

+-----------------------------------------+
| Variable_name     | Value             |
+-----------------------------------------+
|   ・・・・・・             |                   |
| expire_logs_days    | 7                 |
| general_log         | ON                |
| general_log_file    | XXXXXXXX.log      |
|   ・・・・・・             |                   |
| log_bin             | ON                |
|   ・・・・・・             |                   |
| slow_query_log    | ON                |
| slow_query_log_file | XXXXXXXXX.log     |
|   ・・・・・・             |                   |
+-----------------------------------------+

上記だとlogのキーワードにヒットする行が全て表示されるので、「%log%」の箇所を「general_log%」等に書き換える事で、見たい情報を絞り込んで見ることができます。

コメント

タイトルとURLをコピーしました