接続の中断(通信パケットの読み取りエラーが発生しました)


8

mysql error.logが示す

[Warning] Aborted connection 320935 to db: '...' user: '...' host: '...' (Got an error reading communication packets)

クライアント側が取得する間:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Lost connection to MySQL server at 'reading authorization packet', system error: 0
and after a while: Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

私はこれと他の多くのスレッドについてのmysqlマニュアルを読みました。だから私はmy.cnfのいくつかの値を変更しました

max_allowed_packet      = 512M
connect_timeout = 60
net_read_timeout = 120
innodb_buffer_pool_size = 5G

切断された接続のクエリログを確認しました。

22400 Connect user@host on dbname
22400 Query SELECT @@sql_mode
22400 Query     SET SESSION sql_mode=''
22400 Query     SET NAMES utf8
22400 Init DB   dbname
22400 Init DB   dbname

テーブルのステータスを確認しました。bind-addressはサーバーのIPですが、外部から接続できる必要があります。

Aborted_connects is 196

2つのホスト間の接続品質を確認できますか?基本100回のpingが行う必要があります...
melsayed

回答:


4

限られたデータに基づいて、クライアントとMySQLサーバーの間にファイアウォールがあり(ホストに直接ある可能性があります)、MySQLサーバーに3306を許可しますが、最初のSYN要求への応答パケットをブロックします。

両側でパケットダンプを実行して、TCP側で何が起こっているのかを調べたり、両側に存在するファイアウォールを確認したりできます。


ありがとう。これを解消するためにどのようなデータを提供できますか?私の側にはファイアウォールがありません。反対側はわかりません。ほとんどの場合、接続は機能するので、ファイアウォールではないようです。パケットダンプを試しましたが、トラフィックが多く、問題は1日に数回しか発生しません。必要なパケットのみをキャプチャするフィルターの定義に失敗しました。
PiTheNumber 2014

4

これはmysqlの問題ではないようです。

トランスポート層に問題がないことを確認します。を使用してTCP接続を取得できますtelnet [db_server] 3306か?

接続をSSL暗号化する必要があるかどうかについて、クライアントとサーバーは同意していますか?

mysql接続を公共のインターネット経由で実行したい状況はあまり考えられません。これは、「外部から接続できる」という意味だと思います。暗号化されていない場合、これは大きなセキュリティリスクであり、接続ごとにSSLを設定するオーバーヘッドは、ほとんどの場合使用するには高すぎます。ある種の永続的な暗号化トンネルを使用することを検討したい場合があります。


telnet接続とほとんどの接続は、この問題が発生するときだけ正常に機能します。はい、それは公衆インターネット上の接続です。ここで暗号化したいのですが、相手を制御できません。とにかく、最初に接続を安定させる必要があります。
PiTheNumber 14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.