MySQL 中断された接続警告ログの分析

MySQL 中断された接続警告ログの分析

序文:

場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通信パケットの読み取り中にエラーが発生しました」という種類のアラームが表示されます。この記事では、このエラーの考えられる原因とその回避方法について説明します。

1. ステータス変数 Aborted_clients と Aborted_connects

まず、2 つのステータス変数 Aborted_clients と Aborted_connects の意味を理解しましょう。セッションが異常終了すると、これら 2 つのステータス値が変わります。公式ドキュメントによると、概要は次のとおりです。

Aborted_connects ステータス変数の増加の考えられる理由:

  1. クライアントはデータベースにアクセスしようとしましたが、データベースにアクセスする権限がありませんでした。
  2. クライアントが間違ったパスワードを使用しました。
  3. 接続パケットに正しい情報が含まれていません。
  4. 接続パケットを取得するのに connect_timeout 秒以上かかりました。

Aborted_clients ステータス変数の増加の考えられる理由:

  1. クライアント プログラムは終了前に mysql_close() を呼び出しませんでした。
  2. クライアントは、wait_timeout または interactive_timeout パラメータで指定された秒数を超えてスリープしています。
  3. データ転送中にクライアント プログラムが突然終了しました。

簡単に言えば、データベース セッションがデータベースへの正常な接続に失敗した場合、Aborted_connects 変数が増加します。データベース セッションはデータベースに正常に接続されましたが、正常に終了できなかったため、Aborted_clients 変数が増加します。

2. 通信パケットの読み取りエラーが発生しました原因分析

どのような状況で、「db: 'db' ユーザー: 'dbuser' ホスト: 'hostname' への接続 xxxx が中止されました (通信パケットの読み取りエラーが発生しました)」のようなアラームがエラー ログに表示されますか?次に、上記の考えられる理由に基づいていくつかの具体的なテストを実行します。各テストのステータス変数 Aborted_clients と Aborted_connects の変化とエラー ログ レコードに注意してください。

  • テスト 1: パスワードが間違っています、ユーザーが間違っています
1. テストする前にステータス変数の値を確認しますmysql> show global status like 'abort%';+------------------+-------+| Variable_name | Value |+------------------+-------+| Aborted_clients | 0 || Aborted_connects | 0 |+------------------+-------+
2. テストプロセス# mysql -uroot -pwrongpassmysql: [警告] コマンドラインインターフェースでパスワードを使用すると、安全でない可能性があります。ERROR 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: YES)# mysql -uroot1 -pwrongpassmysql: [警告] コマンドラインインターフェースでパスワードを使用すると、安全でない可能性があります。ERROR 1045 (28000): ユーザー 'root1'@'localhost' のアクセスが拒否されました (パスワードの使用: YES)
3. ステータスの変更とエラー ログを表示します。mysql> show global status like 'abort%';+------------------+-------+| Variable_name | Value |+------------------+-------+| Aborted_clients | 0 || Aborted_connects | 2 |+------------------+-------+エラー ログ レコード:2020-03-16T17:58:35.318819+08:00 6 [注] ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: YES)2020-03-16T17:59:04.153753+08:00 7 [注] ユーザー 'root1'@'localhost' のアクセスが拒否されました (パスワードの使用: YES)
結果: Aborted_connects にはエラー ログがありますが、中止された接続に関連するレコードはありません。
  • テスト2: スリープタイムアウトまたは手動セッション終了
1. テスト前にステータス変数の値を確認しますmysql> show global status like 'abort%';+------------------+-------+| Variable_name | Value |+------------------+-------+| Aborted_clients | 0 || Aborted_connects | 2 |+------------------+-------+
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
3. ステータスの変更とエラー ログを確認します。mysql> show global status like 'abort%';+------------------+-------+| Variable_name | Value |+------------------+-------+| Aborted_clients | 1 || Aborted_connects | 2 |+------------------+-------+
結果: Aborted_clients が追加されますが、エラー ログには記録がありません。同様に、スリープ時間が経過すると、Aborted_clients が追加されますが、エラー ログには Aborted connection の記録があります。

異常なセッション終了は通常、Aborted connection アラームを引き起こします。つまり、Aborted_clients ステータス変数の変化を通じて、異常なセッションがあるかどうかを反映できます。すると、「通信パケットの読み取り中にエラーが発生しました」などのアラームの理由が非常に明確になります。関連情報を確認した後、Aborted connection アラームの考えられる理由を次のようにまとめます。

  1. セッション接続が適切に閉じられず、プログラムは mysql_close() を呼び出しませんでした。
  2. wait_timeout または interactive_timeout パラメータよりも長い秒数スリープします。
  3. クエリ データ パケットのサイズが max_allowed_pa​​cket 値を超えたため、リンクが中断されました。
  4. その他のネットワークまたはハードウェアの問題。

3. 問題の回避とまとめ

実際、中止された接続アラームを回避するのは困難です。エラー ログには中止された接続情報が少量含まれますが、これは無視できます。ただし、中止された接続アラームがエラー ログに頻繁に表示される場合は、ビジネスに大きな影響を与える可能性があるため、注意する必要があります。間違いを避ける方法についていくつか提案します。お役に立てれば幸いです。

  1. ビジネス操作が完了したら、アプリケーション ロジックによって接続が正しく閉じられ、長い接続が短い接続に置き換えられることをお勧めします。
  2. max_allowed_pa​​cket の値が十分に高いこと、およびクライアントが「パケットが大きすぎます」というメッセージを受信しないことを確認します。
  3. クライアント アプリケーションが接続を中止しないようにしてください。たとえば、PHP の max_execution_time が 5 秒に設定されている場合、connect_timeout を増やしても PHP がスクリプトを強制終了するため役に立ちません。他のプログラミング言語や環境にも同様のセキュリティ オプションがあります。
  4. アプリケーションが終了した後も接続がクリーンな状態のままになるように、トランザクション (開始とコミット) が正しく実行されていることを確認します。
  5. skip-name-resolve が有効になっているかどうかを確認します。これは、ホストがホスト名ではなく IP アドレスに基づいて認証されているかどうかを確認します。
  6. MySQL の net_read_timeout と net_write_timeout の値を増やして、エラーの数が減るかどうかを確認してください。

上記は、MySQL Aborted connection アラーム ログの詳細な分析です。MySQL Aborted connection アラーム ログの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL シリーズ: redo ログ、undo ログ、binlog の詳細な説明
  • MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明
  • MySQLの7種類のログの概要
  • MySQLはデータ復旧を実装するためにbinlogログを使用する
  • MySQL のスローログ監視の誤報問題の分析と解決
  • MySQL スロークエリログの役割と公開
  • MySQL スロークエリログの有効化と設定
  • MySQL でのログインを取り消す
  • MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal
  • MYSQL SERVER のログファイルを縮小する方法
  • MySQL Undo ログと Redo ログの概要

<<:  ReactプロジェクトでのTypeScriptの実装

>>:  Ubuntuにopencvをインストールする正しい方法の詳細な説明

推薦する

nginx+uwsgi で Django プロジェクトを開始するための詳細な手順

Django で Web プロジェクトを開発する場合、開発およびテストのプロセスでは Django ...

誰もが知っておくべきウェブサイトのユーザビリティに関する 10 のヒント

これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...

W3C が推奨するモバイル Web マークアップ言語 XHTML Basic 1.1

W3C は最近、「 XHTML Basic1.1 」と「 Mobile Web Best Prac...

Linux で lvm 論理ボリューム パーティションのサイズを調整するチュートリアル (xfs や ext4 などのさまざまなファイル システム用)

序文システムをインストールしたときに、パーティション領域を適切に割り当てませんでした。その後のメンテ...

docker-compose.yml ファイル内の一般的なテンプレート コマンドの詳細な説明

注意: docker-compose.yml ファイルを書き込むときは、すべてのコロン (:) とダ...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

実用的なウェブオンラインツール12選

1.ファビコン.cc ico アイコンの Web サイトをオンラインで作成するには、画像をアップロー...

Linux システムのシャットダウンコマンドの違いと使い方の詳細な説明

Linux システムのシャットダウン コマンドは何ですか? Liangxu Tutorial Net...

docker runの--rmオプションの使用方法

Docker コンテナが終了しても、デバッグを容易にし、ユーザー データを保持するために、デフォルト...

DockerコンテナがJupyterにアクセスできない問題の解決策

このプロジェクトでは、環境を構築するために Docker コンテナを使用します。Dockerfile...

Vue でのスロット配置と使用状況分析

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

同じ日の最初の3つのデータを取得するためのMySQLタイムラインデータ

テーブルデータを作成する テーブル `praise_info` を作成します ( `id` bigi...

MySQL の低速クエリの最適化: 理論と実践からの制限の利点

多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...

非常に優れた CSS スキル 10 選のコレクションと共有

ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...

データベースミドルウェアMyCatの紹介

1. Mycatの適用シナリオMycat は幅広いシナリオに合わせて開発されており、新しいユーザーが...