質問は下の方に大きい字で書いています
エラー内容
Pythonのmysql.connectorを用いて、AWSのRDSに用意したMysqlサーバーに接続しています。その際以下のようなエラーが「不定期で」発生します。
Python
1mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'XXXXXXXXXXXXXXXXXXXXXX:3306' 2(通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。)
プログラム概略
下記の処理を1秒間に1回のペースで「接続⇒クエリ実行⇒接続遮断」を繰り返していました(やり方がまずいことに後で気づき、「グローバルな領域に」CONNECTとCURSORを用意し、それを使いまわす形に変えましたが、それで今後エラーが出ないのかはわかりません)
Python
1import mysql.connector 2CONNECT = mysql.connector.connect(port=MYSQL_PORT,user=MYSQL_USER, password=MYSQL_PASSWORD, host=MYSQL_HOST, database=MYSQL_DATABASE, charset='utf8') 3CURSOR = CONNECT.cursor() 4CURSOR.execute("実行したいクエリ") 5CURSOR.close() 6CONNECT.close()
原因調査
もしや、接続しすぎて、クローズ処理が間に合っていないのかと思い、下記のプログラムをテストとして実行しましたが、全くエラーは出ませんでした
Python
1for i in range(1000): 2 CONNECT = mysql.connector.connect(port=MYSQL_PORT,user=MYSQL_USER, password=MYSQL_PASSWORD, host=MYSQL_HOST, database=MYSQL_DATABASE, charset='utf8') 3 CURSOR = CONNECT.cursor() 4 CURSOR.execute("実行したいクエリ") 5 #クローズ処理はわざと行わない
エラー内容から「netstat」コマンドを実行しました。
どこまで開示していい情報化わからないので必要最小限しか記載できませんでした。すいません(´;ω;`)
すると、プログラム実行中は外部IPにRDSのグローバルIPが記載された行が大量(数百行)に生成されていて、状態はESTABLISHEDとTIME_WAITが大量(数百行)に混在していました
bat
1>>> netstat 2 プロトコル ローカル アドレス 外部アドレス 状態 3 一部数字は変えてありますが下記の行が大量に出力されます 4 TCP 191.144.131.200:47980 nrt21s34-in-f345:https ESTABLISHED 5 TCP 191.144.131.200:47980 nrt21s34-in-f345:https TIME_WAIT
質問
結局のところ、エラーの原因はわからずじまいでしたが、考えられる原因は何ですか?
ほんとに不定期でエラーが発生します(エラーが発生するプログラムの箇所もバラバラですが、共通点はMysqlのconnect処理のところでエラーが出ていました)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。