本稿では、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コンテナなど)の終了処理が足りていないなどの場合があります。