2012-04-07 44 views
0

アプリケーションサーバとデータベースサーバ(Mysql)の間に数日間の奇妙な問題があります。アプリケーションサーバからのデータベースサーバへの接続がSYN_SENT状態でハングし、それ以降は作成できませんmysqlポート(3306)上のデータベースサーバへの任意の接続。私たちは、SYN_RECV状態のデータベースサーバ上のnetstatの出力をチェックしました。SYN_SENTのmysqlサーバへの接続

私が知ることができるのは、mysqlサーバがSYN要求を受信し、応答していてクライアントに到達していないため、サーバ側のSYN_RECVとクライアント側のSYN_SENTです。私はSYN_SENTの状態はしばらく後に行く必要があり、同じサーバーへのこの他のDB接続の試行がハングしてはならないと考えています。

この問題を解決するにはどうすればよいですか?

設定の詳細:アプリケーションサーバー:RHEL 5.4、kernel-release = 2.6.18-164.el5、x86_64データベースサーバー:Mysqlバージョン:5.1.49 RHEL 5.4、kernel-release = 2.6.18-164.el5 localhostのみアクセス権を持つサーバー用、x86_64版

答えて

0

修正:my.cnfの

リモートIPの に接続するための修正(REMOTE_IPは、リモートIPに置き換え)

iptables -A INPUT -p tcp -d 127.0.0.1 --dport 3306 -s REMOTE_IP -j ACCEPT 
iptables -A INPUT -p udp -d 127.0.0.1 --dport 3306 -s REMOTE_IP -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -j DROP 
iptables -A INPUT -p udp --dport 3306 -j DROP 
でバインドアドレスで セット127.0.0.1

また、設定する必要がありますmy.cnfのipを0.0.0.0にバインドする必要はありません。(udp part)

実証済み: 最初にリモート接続から宛先への接続を許可します-d 127.0.0.1 = localhostを) -p TCP/UDP =のprotocoll TCPまたはUDP

これは、あなたがポート3306

にTCP/UDP接続にすべての要求をドロップするルールを作成する必要があるルールの後これはなぜ動作するのですか: iptablesが実行されているので、 "数値"です。常に1つのルール。次のコマンドを使用してルールを参照することができます

iptables -L INPUT -n --line-numbers 

あなたはすべての接続を受け入れ、その後のすべての接続xxxxがIPからドロップすると言うならば、それはしないように表示される最初のルールは、最初のルールであります作業。 このIPからのすべての接続を削除するために最初のルールとして選択し、その後すべての接続を許可する必要があります。 (それは悪い例です。)

あなたがエントリを失敗した場合、あなたのルールを表示し、ルールの前に数を取り、コマンドを使用してルールをドロップすることができます。

iptables -D INPUT <<number here>> 
関連する問題