MySQLで次の警告が表示されます。
接続の中断(通信パケットの読み取りエラーが発生しました)
MySQLホスティングにAmazon RDSを使用しています。 MyISAMとInnoDBの両方のストレージエンジンが使用されています(少し変だと思いますが、レガシーコードです)。データベースはPHPアプリケーションのストレージとして使用されます。MySQLのバージョンは5.5.27です。PHP古いmysql拡張を使用してMySQLに接続します( http: //www.php.net/manual/en/ref.mysql.php )
私が試したこと:
max_allowed_packet
を1Gに増やします( MySQL Error Reading Communication Packets で推奨)。innodb_log_file_size
およびinnodb_log_buffer_size
を変更しようとしました( MySQL:通信パケットの読み取りエラー で提案されています)。残念ながら、Amazon RDSではinnodb_log_file_size
を変更できません。 innodb_log_buffer_size
を可能な最大値(4294967295)に変更しようとすると、互換性のない設定が原因でデータベースインスタンスが起動しませんでした。max_connections
設定を128から256に変更しました。これらのすべての手順は、問題の解決に役立ちませんでした。
また、このエラーは常に15分ごとまたは30分ごとに発生することに気付きました。エラーログから:
140528 16:30:00 [警告]データベースへの接続8709が中止されました: 'multisite5'ユーザー: 'uo_proxy'ホスト: 'ip-10-180-232-23.ec2.internal'(通信パケットの読み取りエラーが発生しました)
140528 16:30:00 [警告]データベースへの接続8706が中止されました: 'uoserver'ユーザー: 'uo_proxy'ホスト: 'ip-10-180-232-23.ec2.internal'(通信パケットの読み取りエラーが発生しました)
140528 16:30:00 [警告]データベースへの接続8708を中止しました: 'uoserver'ユーザー: 'uo_proxy'ホスト: 'ip-10-180-232-23.ec2.internal'(通信パケットの読み取りエラーが発生しました)
140528 16:45:00 [警告]データベースへの接続11675を中止しました: 'multisite5'ユーザー: 'uo_proxy'ホスト: 'ip-10-180-232-23.ec2.internal'(通信パケットの読み取りエラーが発生しました)
140528 16:45:00 [警告]データベースへの接続11674を中止しました: 'uoserver'ユーザー: 'uo_proxy'ホスト: 'ip-10-180-232-23.ec2.internal'(通信パケットの読み取りエラーが発生しました)
エラーがいくつかのcronスクリプトによってトリガーされると私は考えていました。理論をテストするためにすべてのcronスクリプトを無効にしましたが、それでもエラーは発生します。
おそらく、RDSの制限のためにサーバー側でこの問題を解決することは不可能ですが、どのタイプのSQLクエリがこのエラーをトリガーできるのでしょうか?たとえば、SQLクエリで大きなBLOBフィールドを使用する場合、または1つのステートメントに多くの行を挿入する場合、誰かがmax_allowed_packet
を増やしたいと思う可能性があることを読んだことがあります。だから問題は-MySQLサーバーをinnodb_log_file_size
とinnodb_log_buffer_size
の現在の値で満足させるために何を変更できるか?多分それは遅いクエリ、または多すぎる同時接続、または何か他のものですか?残念ながら、データベースをRDSからEC2に移動することは、私が選択する最後のオプションです。なぜなら、私が言ったように、データベースチューニングの経験がないため、バックアップやレプリケーションなどをセットアップするのが難しいからです。
さらに詳細を提供する必要がある場合はお知らせください。私はデータベースの専門家ではないため、重要な情報を見逃す可能性があります。
前もって感謝します!
上記の手順を試したので、あなたのこだわりは変更できないもののようです。
2012年8月に投稿しました( ローカルデータベースvs Amazon RDS )。DB接続の数とバッファーサイズがRDSサーバーモデルでそれぞれ固定され不変であることに言及しています。また、トランザクションログは128Mに固定されていることにも言及しました。使用するRDSサーバーモデルに関係なく 。
提案:親切にしてください。 RDSからEC2にDBを移行します。次に、InnoDBインフラストラクチャを変更するために必要な柔軟性が得られます。したがって、自分でバックアップを作成し、レプリケーションを手動でセットアップする必要があります。
EC2に行くことが最後の手段だとおっしゃっていましたね。 RDS環境ではInnoDBを効果的に調整できないため、次の論理的なステップはEC2です。