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をインストールする正しい方法の詳細な説明

推薦する

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

VirtualBox での CentOS 8.1 仮想マシンのインストールを最小限に抑える詳細なチュートリアル

1. 関連ツールと画像をダウンロードするダウンロードリンクバーチャルボックス: https://do...

vue3 における vuex と pinia の落とし穴

目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...

MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例

最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの...

Nginx インストールの詳細なチュートリアル

1. Nginxの簡単な紹介Nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリ...

フレームセットの共通プロパティ(フレームとウィンドウの分割)

フレームとは、Web ページ画面を複数のフレームに分割したもの(複数の Web ページという形で表示...

Vue Element UIの使用時に遭遇した問題をまとめる

目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...

一般的なブラウザのユーザーエージェントの概要

1. 基礎知識: HTTP ヘッダー ユーザーエージェントユーザー エージェントは、ユーザー エージ...

MYSQL インストールの解凍バージョンと発生したエラーと解決策

1 インストールMYSQL 公式サイトから対応する解凍バージョンをダウンロードし、必要なディレクトリ...

Centos7 での nginx のインストールと設定に関する詳細なチュートリアル

注: ソフトウェアのインストールの基本ディレクトリ パスは /usr/local です。ソフトウェア...

nginx を https をサポートするように設定するためのサンプル コード

1. はじめにあなたのウェブサイトはまだインターネット上に公開されたままですか?ここでは、HTTPS...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

MySQLがファントムリードを解決する方法の詳細な説明

1. ファントムリーディングとは何ですか?トランザクションにおいて、複数のクエリの後に結果セットの数...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...

Node.jsを使用してホットリロードページを実装する方法の詳細な説明

序文少し前に、browser-sync+gulp+gulp-nodemon を組み合わせて、本番環境...