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

推薦する

ウェブページコンテンツの閲覧設計手法に関する議論

<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...

Ubuntu ブート自動起動サービス設定

Ubuntu でサービスを作成し、自動的に起動する方法: 1. [/lib/systemd/syst...

Linuxサービスの監視と運用および保守

目次1. psutilパッケージをインストールする次に、オペレーティングシステム内のすべてのサービス...

画像ソーシャルネットワーキングサイトのUIアプリケーションの比較分析(図)

私たちの生活、仕事、勉強において、ソーシャル ネットワークは徐々に将来のインターネット発展のトレンド...

Firebug ツールを使用して iPad でページをデバッグする

iPad でページをデバッグするにはどうすればいいですか? iOS 5 をご利用の場合、iPad の...

Windows 10 で MySQL の解凍バージョンをインストールする方法の詳細なグラフィック チュートリアル

MySQL のインストールは、インストール バージョンと解凍バージョンに分かれています。インストール...

VirtualBox で作成された Debian 仮想マシンは Windows ホストとファイルを共有します

用語: 1. VM: 仮想マシンステップ: 1. Windows 10 に VirtualBox 6...

CentOS8でルートパスワードを素早く変更する方法

Centos8仮想マシンを起動し、上下キーを押して図1のインターフェースの最初の行を選択します。図1...

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

/******************** * 仮想ファイルシステム VFS **********...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

VMware仮想マシンでのLinuxのコピー&ペーストの詳細な説明

1. VMware Workstation 上の Linux: 1. ソースの更新(オプション) v...

MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例断片化の原因(1)テーブルのストレージは断片...

Windows 10 での MySQL 8.0.20 のインストールと設定方法のグラフィック チュートリアル

Win10システムにMySQL8.0.20をローカルにインストールし、個人的にテストして利用可能であ...

MySQL ビューの紹介と基本操作のチュートリアル

序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...