MySQLで「Got an error reading communication packets」というエラーが出力される原因と対策

 本稿では、MySQL Server で「Got an error reading communication packets」というエラーが発生する場合の原因と対策について解説します。

事象

 MySQL のエラーログに次のようなエラーが出力されました。

[Note] Aborted connection 251 to db: 'db_name' user: 'user_name' host: 'host_name' (Got an error reading communication packets)

原因

 このエラーが発生する原因は、データベース接続元(クライアント)によるコネクションの切断方法が悪いことが原因です。 MySQL Server からすると「急に接続が切断された!」ということでエラーをログに出力しています。

ログ以外での検知方法

 この予期せぬ切断は、MySQLのログだけではなく、MySQLの管理用データベースにも発生回数が記録されています。 MySQLに管理者ユーザでログインし、次のように SHOW GLOBAL STATUS; という SQL を実行すると MySQL の様々な状態を参照することができます。 その中の Aborted_clients の値が、クライアントが予期せぬ切断をした回数になります。

mysql> SHOW GLOBAL STATUS;
+------------------+-----------+
| Variable_name    | Value     |
+------------------+-----------+
Aborted_clients  | 423       |
(以下略)

 システム開発の結合試験行程などにおいては、この Aborted_clients の値が高くなっていないことを確認し、データベースの切断が正常に行われていることを確認すると安心でしょう。

対応策

 対応策としてはシンプルで、MySQL に接続しているプログラムの切断方法を見なおしてください。 プログラムを自作している場合は、ご利用のプログラミング言語でのデータベース切断方法をもう一度見直しましょう。
 また「フレームワークやライブラリを利用しているから、自動的に接続・切断をやってくれているはず」という場合も、利用しているフレームワークやライブラリの使い方が間違っていないかを確認しましょう。 データベースへの接続とは直接関係しなそうに思えるライブラリ(DIコンテナなど)の終了処理が足りていないなどの場合があります。

MySQL 入門へ戻る

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。