ホームページ >データベース >mysql チュートリアル >Mysql のエラー ログ、binlog ログ、クエリ ログ、スロー クエリ ログの概要

Mysql のエラー ログ、binlog ログ、クエリ ログ、スロー クエリ ログの概要

黄舟
黄舟オリジナル
2017-03-01 14:05:411650ブラウズ

はじめに

データベース ログは、データベース管理者がデータベース内で発生したさまざまなイベントを追跡および分析するのに役立つ強力な基盤です。MySQL では、エラー ログ、binlog ログ (バイナリ ログ)、調査ログ、スロー クエリ ログが提供されます。ここでは、次の質問に答えようとします。各ログの目的は何ですか?これらのログを管理するにはどうすればよいでしょうか?これらのログによって提供される情報をどのように使用しますか?

エラーログ

1. エラーログの機能

エラーログには、mysqlの起動時と停止時、およびサーバーの動作中に発生した重大なエラーに関する情報が記録されます。 mysqlの起動異常など、データベースに何らかの障害が発生して起動できない場合、まずこのログを確認することができます。 mysqlでは、エラーログログ(その他のログ)をファイルに保存するだけでなく、もちろんデータテーブルに保存することもできます。実装方法については、筆者も勉強中です...·。 2 .エラーログの制御と使用

1.

Configuration

は、log-error=[file-name](mysql設定ファイル内)を通じて設定されます。file_nameが指定されていない場合、mysqldは使用します。エラー ログ名は host_name.err (host_name はホスト名) で、ログ ファイルはデフォルトでパラメータ datadir で指定されたディレクトリ (データが保存されるディレクトリ) に書き込まれます。

たとえば、私はローカルで WampServer 統合環境を使用しています

where log-error=D:/wamp/logs/mysql.log

以下に示すように


log-error (#log-error=D:/wamp/logs/mysql.log) をコメントアウトしてサーバーを再起動すると、ディレクトリ内のエラーログファイルを表示できますdatadir で指定 次へ


2. エラーログの形式: 時間 [エラーレベル] エラーメッセージ

mysql 経由で設定したい場合 ファイルからエラー ログの場所を見つけるのは面倒です。 'log_error'; のようなコマンドを使用してエラー ログの場所を確認できます。

以下はmysql起動ログです



バイナリログ

1. 機能

バイナリログ(バイナリログとも呼ばれます)は、すべてのDDL(データ定義言語)ステートメントとDML(データ操作言語)ステートメントを記録します。データ クエリ ステートメントは含まれません。ステートメントは、データ変更のプロセスを記述する「イベント」の形式で保存されます。このログの 2 つの主な機能は、データ回復とデータ複製です。



データリカバリ: MySQL自体にはデータのバックアップとリカバリ機能があります。たとえば、毎日深夜 12 時にデータをバックアップします。ある日の午後 13 時にデータベースに障害が発生すると、データベースの内容が失われます。この問題はバイナリ ログによって解決できます。解決策は、前日の深夜 12:00 にデータ バックアップ ファイルをデータベースに復元し、バイナリ ログを使用して、前日の深夜 12:00 から 13:00 までのデータベース上の 操作に応答することです。今日。

データレプリケーション: MySQL はマスターサーバーとスレーブサーバー間のデータレプリケーション機能をサポートしており、この機能を使用してデータベースの冗長メカニズムを実装し、データベースの可用性を確保し、データベースのパフォーマンスを向上させます。 MySQL はバイナリ ログを介したデータ転送を実装します。マスター サーバー上のバイナリ ログの内容は各スレーブ サーバーに送信され、各スレーブ サーバーで実行されるため、マスター サーバーとスレーブ サーバー間のデータの一貫性が確保されます。

2. バイナリログの制御と使用

1. デフォルトでは、mySQL はバイナリログを記録しません。 MySQL のバイナリ ロギング機能を有効にするにはどうすればよいですか?

MySQL 構成ファイルを通じて、MySQL を制御してバイナリ ロギング機能を開始できます。パラメーター log-bin=[base_name] を変更して、MySQL バイナリ ログを開始します。

mySQL は、変更されたデータベース コンテンツ ステートメントを、base_name-bin.0000x という名前のログ ファイルに記録します。ここで、bin はバイナリを表し、サフィックス 00000x は、Mysql が起動されるたびに、バイナリ ログ ファイルの順序を表します。ファイルは自動的に 1 を追加します。base_name が定義されていない場合、MySQL は pid-file パラメータで設定された値をバイナリ ログ ファイルのベース名として使用します。 たとえば、ログ bin ファイルに mybinlog という名前を付けた場合、mybinlog.00000x のバイナリ ログ ファイルが D:/wamp/bin/mysql/mysql5.6.17/data に生成されます。ディレクトリ。

バイナリログファイルは以下のとおりです

'log_bin'などのshow変数を使用して、バイナリログログがオンになっているかどうかを確認します。



2. Mysqlバイナリログは、主にMySQLの内部使用に対応しており、データベース管理者が読み取って使用していませんログの重要な違いは、バイナリ ファイルの形式がテキスト形式ではなく、その内容をメモ帳から直接表示できないことです。管理者管理を容易にするために、MySQL はバイナリ ログを表示するための mysqlbinlog ツールを提供します。コンテンツ。


例: mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000003

実行結果は次のようになります:


それでは、bin ログが保存されているかどうかを確認するテストを行ってみましょう。 records me データベースを更新する操作

例えば、データテーブルt2のid2=2の行レコードのid1を5に変更します。次に、バイナリ ログ ファイルをクエリして、操作が記録されているかどうかを確認します。


結果は明らかです。バイナリファイルにはデータベースを変更した操作が記録されていますが、クエリステートメントについては記録されていません。

3. バイナリログの削除

比較的負荷の高いシステムでは、毎日大量のログが生成されるため、それらが長期間にわたってクリア(または転送)されないと、大量のディスク容量 大きな無駄。したがって、ログを定期的に削除することは、DBA による MYSQL データベースのメンテナンスの重要な部分です。

1. リセットマスターコマンド

を介してリセットマスターコマンドを実行します。これにより、すべてのbinlogログが削除されます。新しいログ ファイル番号は 000001 から始まります。

2. マスター ログのパージを使用して、

base_name.xxxxxx」へのマスター ログのパージを実行して、「xxxxxx」番号より前のすべてのログを削除します。以下では、mybinlog.000003 より前のすべてのログを削除します。

以下に示すように:



3. 'time' コマンドの前にマスターログをパージします

' は削除を意味します'time' 以前のすべてのログ。たとえば、2016-04-01 00:00:00 より前のすべてのログを削除するには、コマンドは次のようになります:

purge master logs before '2016-04-01 00:00:00' ;

4. 設定ファイルでexpire_logs_daysパラメータを設定して、ログが期限切れになるまでの日数を指定します

パラメータexpire_logs_days=#を設定すると、指定した日数が経過すると、ログは自動的に削除されます。これが私が好む方法です。たとえば、expire_logs_day=3 を設定すると、3 日後に自動的に削除されることになります。

4. バイナリログの重要なパラメータの説明

max_binlog_size: 単一のバイナリログファイルの最大値を指定します。この値を超えると、接尾辞が付けられた新しいバイナリログファイルが生成されます。 +1してインデックスファイルに記録されます。

binlog_cache_size: キャッシュ領域のサイズ

sync_binlog: N が 1 に設定されている場合、キャッシュが何度もキャッシュに書き込まれることなくディスクに同期されることを示します。キャッシュがディスクに同期されていることを意味します。 MySQL のデフォルトのシステム設定は sync_binlog=0 です。これは、現時点でのパフォーマンスは最高ですが、リスクも最大です。システムがクラッシュすると、binlog_cache 内のすべての binlog 情報が失われるためです。 「1」に設定すると、最も安全な設定になりますが、パフォーマンスの損失が最も大きくなります。 1 に設定すると、システムがクラッシュしても、実際のデータに実質的な影響を与えることなく、binlog_cache 内の最大 1 つの未完了のトランザクションが失われるためです。

binlog-do-db: 記録する必要があるデータベース日。デフォルト値は空です。これは、すべてのライブラリ ログがバイナリ ログに同期されることを意味します。

binlog-ignore-db: データベースを無視する必要がある日数

log-slave - 更新: ビルド時に構成が必要ですマスター/スレーブ データベース 6. バイナリログを使用する データリカバリ

前に説明したように、データが異常で、特定の時点のデータに復元したい場合、バイナリだけでは十分ではないことがよくあります。 必要なのは、このデータのバックアップです。その時点より前に。

効果の観察を容易にするために、現時点でデータ テーブル t1 のデータは次のようになります:

今後、データに対していくつかの操作を実行する必要があります。たとえば、更新または挿入操作の後、t1 データは次のようになります

この時点で、何か非常に不幸なことが起こり、ハッカーが侵入して私の t1 を盗みました。すべてのテーブル データが削除されています。では、ハッカーが削除する前にデータを取得するにはどうすればよいですか?


ステップ 1: バックアップしたデータにデータを復元する必要があります。復元後の結果は次のとおりです。


ステップ 2: バイナリ ログ ファイルを使用して、データ バックアップの瞬間からハッキングされる直前までのすべてのデータ操作を復元する必要があります

実行: mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000004

バイナリ ログを分析すると、「637」行目でデータがハッカーによって攻撃されていることがわかりました。そのため、637 行目以前のすべての操作を復元し、それ以降のすべての操作を無視するだけで済みます。


したがって、次のコマンドを実行してデータを復元できます:

mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000004 --stop-pos=637|mysql -uroot - p** dequan

それでは、t1テーブルのデータを確認してみましょう


ついに完成しましたが、これは順番に便利であることを思い出させますデータを回復するには、バイナリ ログをオンにするだけでなく、データを定期的に保存する必要があります。


バイナリログに関する追加情報:


1. show binary を使用して、現在利用可能なバイナリを確認してください。 log コマンドのログ。


2. show binlog events記録されたイベント

show binlog events を使用して、ログに記録されたすべてのイベントを表示できます。特定のバイナリ ログ記録イベントをクエリしたい場合は、以下に示すように、末尾に + 'ログ名' を追加できます:



クエリ ログ

1. 機能の説明

クエリログはクライアントからのすべてのステートメントを記録します。他のログと同様に、file_name の値が指定されていない場合、ログは datadir が存在するディレクトリに書き込まれます。このログのデフォルトのファイル名は host_name.log です。システムのパフォーマンスに大きな影響を与えるため、通常はオンになりません。そのため、ここでは詳しく説明しません。


スロークエリログ

1. 機能説明

スロークエリログは、実行時間がパラメータlong_query_time(単位:秒)を超えたすべてのSQL文を記録するログです。テーブル ロックの取得を待機する時間は実行時間としてカウントされません。 log-slow-queries=[file_name] オプションを使用して、スロー クエリ ログ機能を有効にできます。前のログと同様に、file_name が指定されていない場合、ログ ディレクトリは datedir ディレクトリにあり、デフォルト名は host_name-slow.log になります。

2. スロークエリログの読み取り

スロークエリのオープンステータスをクエリします


設定ファイルに次のコードを追加してスロークエリを有効にします

#スロークエリを有効にする
slow_query_log=ON
slow_query_log_file=D:/ wamp /logs/myslowquery.log
long_query_time=1.5


(一部の場所では、スロークエリログは log-slow-queries=[file_name] で指定されていると書かれていますが、試してみるとエラーが発生します)このように mysql を起動すると報告されます。おそらく、私は win システムで動作しているか、ローカルの mysql が WampServer 統合環境を使用してインストールされているか、使用されているバージョンが異なる可能性があります)

遅いクエリ時間の設定を確認してください


変更が遅い場合は、クエリ時間に set long_query_time=1.5; を使用できます


効果を確認しやすくするために、遅いクエリ時間の制限を 0.15 に変更し、時間を指定して SQL を作成します。 0.15 を超えている場合は、最後にログをチェックして SQL ステートメントが記録されているかどうかを確認します。

スロークエリ時間を設定し、対応するSQLステートメントを実行します




上記の合計3つのSQLステートメントを実行しました。次に、以下のスロークエリログを見てみましょう


クエリに長時間かかる SQL ステートメントを記録するだけです。

上記は、Mysql のエラー ログ、binlog ログ、クエリ ログ、およびスロー クエリ ログの紹介です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。 )!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。