MySQLログシステムの使い方に関する簡単なチュートリアル

MySQLログシステムの使い方に関する簡単なチュートリアル

序文

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース管理システムであり、Oracle の製品です。 MySQL は、最も人気のあるリレーショナル データベース管理システムの 1 つです。WEB アプリケーションに関して言えば、MySQL は最高の RDBMS (リレーショナル データベース管理システム) アプリケーション ソフトウェアの 1 つです。

どのデータベースにも、データベース管理者がデータベース内で発生したさまざまなイベントを追跡できるように、データベース作業のあらゆる側面を記録するさまざまなログが存在します。
MySQLには4つの異なるログがあります。

  • エラーログ
  • バイナリログ(BINLOG ログ)
  • クエリログ
  • スロークエリログ

これらのログには、データベースのさまざまな側面のトレースが記録されます。MySQL ログの使用方法を学ぶことは、データベースの使用と保守に非常に役立ちます。

1. エラーログ

エラー ログは、MySQL で最も重要なログの 1 つです。mysqld がいつ起動および停止したか、およびサーバーの動作中に重大なエラーが発生したかどうかに関する情報が記録されます。データベースに障害が発生し、正常に使用できない場合は、まずこのログを確認できます。
このログはデフォルトで有効になっています。デフォルトの保存ディレクトリは mysql データ ディレクトリ (var/lib/mysql) で、デフォルトのログ ファイル名は hostname.err (hostname はホスト名) です。

1. ログの場所を確認する

'log_error%' のような変数を表示します。

2. ログの内容を表示する

テール -f /var/lib/mysql/xxx.err 

2. バイナリログ

バイナリ ログ (BINLOG) には、すべての DDL (データ定義言語) ステートメントと DML (データ操作言語) ステートメントが記録されますが、データ クエリ ステートメントは記録されません。このログは、災害発生時のデータ復旧において非常に重要な役割を果たします。MySQL のマスター スレーブ レプリケーションは、このバイナリ ログを通じて実現されます。

1. バイナリログを有効にする

バイナリ ログはデフォルトでは有効になっていません。MySQL 構成ファイルで有効にして、MySQL ログの形式を構成する必要があります。

  • 設定ファイルの場所: /etc/my.cnf
  • ログの保存場所: 設定時にファイル名が指定されているがパスが指定されていない場合、ログはデフォルトで MySQL データ ディレクトリに書き込まれます。
#binlog ログを設定します。ログファイルのプレフィックスは mysqlbin です -----> 生成されるファイル名は次のようになります: mysqlbin.000001、mysqlbin.000002 
log_bin = mysqlbin
 
#バイナリログ形式を設定する binlog_format=STATEMENT

2. バイナリログ形式

(1)声明

このログ形式では、ログ ファイルに SQL ステートメントが記録されます。データを変更する各 SQL ステートメントがログ ファイルに記録されます。各ステートメントのテキストは、MySQL が提供する mysqlbinlog ツールを使用して明確に表示できます。マスタースレーブレプリケーション中、スレーブはログを元のテキストに解析し、スレーブ上で再実行します。

(2)行

このログ形式では、SQL ステートメントを記録する代わりに、ログ ファイルの各行のデータの変更が記録されます。たとえば、SQL ステートメント update tb_book set status='1' を実行すると、ログ形式が STATEMENT の場合は、SQL ファイルの 1 行がログに記録されます。ROW の場合は、テーブル全体が更新されるため、つまりレコードのすべての行が変更されるため、ROW 形式のログには各行のデータの変更が記録されます。

(3)混合

これは MySQL の現在のデフォルトのログ形式で、STATEMENT 形式と ROW 形式が混在しています。デフォルトでは、STATEMENT が使用されますが、特殊な場合には ROW が記録に使用されます。 MIXED 形式は、両方のモードの欠点を回避しながら、両方のモードの利点を最大限に活用できます。

3. ログの読み取り

ログはバイナリ形式で保存されており、直接読み取ることはできないため、表示するにはmysqlbinlogツールを使用する必要があります。構文は次のとおりです。

mysqlbinlog ログファイル;

4. STATEMENT形式のログを表示する

(1)挿入文を実行する

tb_book に値 (null、'Lucene'、'2088-05-01'、'0') を挿入します。

(2)mysqlデータファイルディレクトリ内のバイナリファイルを見つける

mysqlbin.index はログ ファイル名を記録するログ インデックス ファイルです。 mysql-bin.000001はログファイルです

(3)ログファイルを表示する


5. ROW形式のログを表示する

(1)設定ファイルで設定する

#binlog ログを設定します。ログファイルのプレフィックスは mysqlbin です -----> 生成されるファイル名は次のようになります: mysqlbin.000001、mysqlbin.000002 
ログビン=mysqlbin
 
#バイナリログ形式を設定する binlog_format=ROW

注意: 設定ファイルを変更するたびにMySQLサービスを再起動することを忘れないでください。

サービスmysqlの再起動

(2)データを挿入する

ログ形式が ROW の場合、データを直接理解することはできません。mysqlbinlog の後に -vv パラメータを追加できます。文字セットの影響を回避するには、--no-defaults パラメータを使用します。

6.

6. ログの削除

負荷の高いシステムでは、毎日大量のログが生成されます。これらのログが長期間消去されない場合、大量のディスク領域を占有することになります。ログを削除する一般的な方法は次のとおりです。

(1)方法1

Reset Master コマンドを使用して、すべての binlog ログを削除します。削除後、ログ番号は xxxx.000001 から再開されます。

削除する前に、ログ ファイルを照会します。

ログ削除コマンドを実行する

マスターをリセット

もう一度確認

最後に残った000001は空の設定ファイルです

(2)方法2

マスターログを 'mysqlbin.****** に消去します。

このコマンドは、 ******番号より前のすべてのログを削除します。

(3)方法3

'yyyy-mm-dd hh24:mi:ss' 以前のマスター ログを消去します

このコマンドはyyyy-mm-dd hh24:mi:ss

(4)方法4

パラメータexpire_logs_days=#を設定します。このパラメータは、ログの有効期限を設定することを意味します。指定された日数が経過すると、ログは自動的に削除されます。これにより、ログを管理する DBA の作業負荷が軽減されます。

3. クエリログ

クエリ ログにはクライアントのすべての操作ステートメントが記録されますが、バイナリ ログにはデータをクエリするための SQL ステートメントは含まれません。

デフォルトでは、クエリ ログは有効になっていません。クエリログを有効にする必要がある場合は、次の構成を設定できます。

#このオプションはクエリログを有効にするために使用されます。オプションの値: 0 または 1。0 はオフ、1 はオンを意味します。general_log=1
 
#ログファイル名を設定します。指定しない場合、デフォルトのファイル名はhost_name.logになります。 
general_log_file=ファイル名

1. クエリログを有効にする

2. 一連の操作を実行する

3. クエリログを表示する

4. スロークエリログ

スロー クエリ ログには、実行時間がパラメータ long_query_time の設定値を超え、スキャンされたレコード数が min_examined_row_limit 未満ではないすべての SQL ステートメントが記録されます。 long_query_time のデフォルト値は 10 秒、最小値は 0、精度はマイクロ秒単位です。

1. ファイルの場所と形式

スロークエリログはデフォルトで無効になっています。スロークエリログは2つのパラメータで制御できます

# このパラメータは、スロークエリログを有効にするかどうかを制御するために使用されます。可能な値は 1 と 0 です。1 は有効、0 は無効を意味します。slow_query_log=1 
 
# このパラメータは、スロークエリログのファイル名を指定するために使用されます slow_query_log_file=slow_query.log
 
# このオプションはクエリ時間制限を設定するために使用されます。クエリ時間がこの制限を超えると、遅いクエリとみなされ、ログ記録が必要になります。デフォルトは10秒です。 
長いクエリ時間=10 

一般的には 2 秒程度に設定すれば十分ですが、私の実験では遅いクエリを完了するために 0.5 秒に設定しました。

現在のlong_query_timeはMySQLクライアントで照会できます。

2. クエリ操作を実行する

(1)クエリを実行する前にスロークエリログを確認する

(2)より高速なクエリアクションを実行する

(3)スロークエリアクションを実行する

スロークエリログの内容が大量にある場合、ファイルを直接閲覧するのは面倒です。このとき、MySQL に付属している mysqldumpslow ツールを使用して、スロークエリログを分類して要約することができます。

ここではスロークエリレコードが1つしかないため、mysqldumpslowの効果は反映されていないが、スロークエリレコードが多数ある場合は分類してまとめることができる。

要約する

これで、MySQL ログ システムの簡単な使用方法のチュートリアルに関するこの記事は終了です。MySQL ログ システムに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明
  • Laravel フレームワークは monolog_mysql を使用してシステム ログ情報を mysql データベースに保存します。
  • MySQLログシステムの詳細情報共有
  • MySQL ログファイルはどこにありますか? MySQL ログファイルの場所を変更する方法
  • MySQLはトレースログを表示して実行されたSQL文を追跡します。
  • MySQLエラーログを表示する方法
  • MySQL ログの設定と表示方法
  • MySQL Innodb テーブルによって発生するデッドロック ログの分析と概要
  • mysql binlog ログを正しくクリーンアップする 2 つの方法
  • Ubuntu で MySQL を起動、停止、再起動し、エラー ログを表示するコマンド

<<:  はじめに: HTML の基本的なタグと属性の簡単な紹介

>>:  vue-cli の紹介とインストール

推薦する

HTMLページのヘッダーコードは完全に明確です

以下のコードはすべて <head>...</head> の間にあり、具体的な...

HTML内のフレームセットタグが正常に表示されない原因の解析と解決方法

<frameset></frameset>は皆さんもよくご存知のものです。こ...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

太陽系の惑星のアニメーション効果を実現するHTML+CSS3コード

太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

Linux スクリプトの基礎を詳しく紹介

目次1. スクリプトvim環境2. シェルスクリプトで環境を定義する方法3. シェルスクリプト内の翻...

テーブルの最大幅と最小幅を設定する際の互換性の問題と解決策の詳細な説明

テーブル内の min-width と max-width プロパティの設定 <テーブル>...

MySQLは現在の日付と時刻を取得する関数

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

iframe ページパラメータの文字化けの問題について議論

非常に珍しいパラメータ文字化けの問題に遭遇しました。まずページを見てみましょう写真に示すように、月次...

HTMLエリアタグの詳しい説明

<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...

動的なセカンダリメニューを実現するためのCSS

シンプルなセカンダリメニューを動的に実装するマウスを第 1 レベルのラベル上に置くと、マウスが小さな...

Dockerは同じIPネットワークセグメントとの接続を実現する

最近、Docker とホストが同じネットワーク セグメント上で通信する問題を解決し、そのプロセス全体...

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

MySQLで大きなテーブルを正常に削除する方法の詳細な説明

序文テーブルを削除するには、無意識に思い浮かぶコマンドは、DROP TABLE "テーブル...