MySQL Serverは、サーバーのアクティビティを監視するのに役立ついくつかのログを生成します。ただし、これらのログを有効にすると、サイズが大きくなり、ディスク領域を大量に消費し始める可能性があります。これが、MySQLログファイルを一定期間アーカイブおよび保存し、古いものを削除する自動化された方法を持つことが重要である理由です。このブログ投稿では、MySQLデプロイメントのMySQLエラーログ、一般ログ、および低速クエリログを設定および管理するためのいくつかのベストプラクティスについて説明します。
MySQLサーバーロギングの設定
次の3種類のログを設定する方法を見てみましょう。
エラーログ
mysqldの開始、実行、または停止中に発生したすべての問題をログに記録します。このログは、/ etc/my.cnfファイルに次のオプションを設定することで有効にできます。
- log_error =/ var / log / mysql / mysqld.log
一般的なクエリログ
確立されたクライアント接続とクライアントから受信したステートメントをログに記録します。このログは、/ etc/my.cnfファイルに次のオプションを設定することで有効にできます。
- general_log =ON
- general_log_file =/var/log/mysql/general.log
遅いクエリログ
実行にlong_query_time秒以上かかったクエリをログに記録します。このログは、/ etc/my.cnfファイルの次のオプションで有効にできます。
- slow_query_log =ON
- slow_query_log_file =/var/log/mysql/mysql-slowquery.log
ログローテーションの基準の設定
例として、一般的なMySQLクエリログを管理するためのいくつかの基準を用意しましょう。次の質問をすることで、ログ管理に適した一連の基準を考え出すことができます。
Q:ログファイルが大きくなる可能性のある最大サイズはいくつですか?
A:最大300 MBまで拡大できるとしましょう。その後、回転して圧縮する必要があります。
Q:ログファイルをローテーションする頻度はどれくらいですか?
A:ログを毎日ローテーションする必要があると言えます。
Q:保持したい古いログファイルはいくつですか?
A:最後の30個のログファイルを保持したいと思います。
上記の基準に基づくと、一般的なクエリログ管理に必要な全体のディスク容量は約1.2GBです。圧縮率を90%とすると、それぞれサイズが30 MBの圧縮ログファイルが30個、ライブログファイルが約300MBになります。
MySQLサーバーログの管理:回転、圧縮、保持、削除クリックしてツイート
Linuxlogrotateユーティリティを使用したログの管理
logrotateは、ログファイルの効率的な管理を支援し、ログファイルの自動ローテーション、圧縮、削除のオプションを提供するLinuxユーティリティです。上記で確立された基準は、/ etc / logrotate.dフォルダーに構成ファイルを作成することにより、logrotateユーティリティ用に構成できます。
この構成ファイルをmysqlgeneralと呼びましょう。ファイルの内容は、次のようになります。
/var/log/mysql/general.log{
compress
dateext
maxsize 300M
copytruncate
maxage 365
dateformat -%Y%m%d%s
daily
rotate 30
notifempty
}
上記のlogrotateオプションを使用すると、一般的なクエリログは、毎日、またはログファイルのサイズが300MBを超えるとローテーションされます。古いログは圧縮され、30個のそのようなファイルが保存されます。 「notifempty」の設定によりログファイルが空の場合、ログローテーションはスキップされます。
「copytruncate」オプションは、ローテーション中に現在のログファイルが削除されず、その内容のみが切り捨てられるようにすることです。一部のアプリケーションではログファイルが常に利用可能であり、最初にアプリケーションを停止せずにログを削除することはできないため、これは重要です。
一般的なクエリログのログローテーション構成が設定されたので、上記の構成を実行するためにlogrotateユーティリティを実行する必要があります。これは通常、cronジョブを介して行われます。 logrotateスクリプトを/etc/cron.hourlyディレクトリに配置することで、これを1時間ごとに実行するように設定できます。
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
したがって、いくつかの簡単な手順で、基準に基づいてMySQL一般ログのログローテーションを設定しました。 MySQLエラーログと低速クエリログについても同じアプローチに従うことができます。 MySQLデプロイメントの最適化の詳細については、これらの他の投稿を確認してください。
- MySQLサーバーのInnoDBバッファープールサイズの計算
- MySQLチュートリアル–MySQLサーバーでのSSLの構成と管理
- MySQL高可用性フレームワークの説明–パートI:はじめに