1

Windows サーバーでホストされている MySQL データベースがあり、リモート Web サーバーからクエリを実行したいと考えています。PHP を使用して MySQL データベースに接続しようとすると (mysqli を使用する必要があることはわかっています):

$connection = @mysql_connect("203.0.113.0:3306", "username", "password");

ポートを指定してもしなくても、長時間ロードした後、2003 のエラーで次のエラーが発生errornoます

「203.0.113.0」で MySQL サーバーに接続できない (4)

netstat -nMySQL サーバーをホストしているサーバーでコマンド プロンプトを実行すると、次のようになります: http://pastebin.com/pbRJNqCZ。画面がいっぱいになったので、すべてをコピーすることはできませんでしたが、他のすべてがコピーされたことはわかっています (値が 3306 のポートがいくつか見られました。これは MySQL ポートです)。

TCP    127.0.0.1:port        127.0.0.1:port        ESTABLISHED

実行すると、次のようnetstat -a | find "LISTENING"になります: http://pastebin.com/Lqj2BrQK

これが私がこれまでに知っていることです:

  • ローカルで接続できるため、MySQL サーバーが起動していないというエラーではありません。
  • 他のデータベースに接続できるため、Web サーバーが MySQL データベースに接続できないというエラーではありません。
  • 認証エラーではありません (ユーザー名とパスワードが正しく、リモート サーバーにアクセス許可がある)
  • 3306ポートは TCP と UDP の両方で転送されるため、ポート転送エラーではありません。
  • サーバーがホストされているマシンに接続できることはエラーではありません。問題なくpingできるからです。
  • サーバーは localhost インターフェイスでリッスンしているだけではありません。skip-networking私のファイルでbind-addressはコメントアウトされていmy.cnfます。

接続コードを編集したり、MySQL サーバーを編集してこのエラーを修正するにはどうすればよいですか?

4

1 に答える 1

1

ディスカッション/チャットの要約:

my.cnf: でネットワーク アドレス 0.0.0.0 をバインドし、コメント アウトされているか存在しないbind-address = 0.0.0.0ことを確認します。skip-networking

小切手netstat -a | find "LISTENING"

ペーストビンによると、3306 でリッスンしているサービスがあります。サーバー自体から NIC アドレスでポートに到達できるかどうかをテストします。この方法では、外部ファイアウォールは有効になりません。簡単なテストは、そのポートへの telnet 接続を試すことです。より詳細な情報をツールでキャッチできますnmap。Nmap は mysql ポートをフィルター処理済みとして表示しました。これは、ローカル パケット フィルタ (この場合は Windows ファイアウォール) に問題があることを示しています。

Windows ファイアウォールが、すべてまたは特定のマシンから TCP ポート 3306 へのパブリック アクセスを許可するように構成されていることを確認します。パブリック プロファイルでルールを設定するか、両方のサーバーが同じドメイン コントローラーによって制御されている場合は、ドメイン プロファイルでルールを設定します。ローカル マシンからのアクセスが成功したら、リモート Web サーバーから同じことを試みます。

MySql ポートへのリモート アクセスを適切に構成できない場合は、2 台のマシン間に SSH トンネルを確立することを検討してください。確立すると、ローカル マシン上にあるかのように MySql にアクセスできます。ポートはトンネル経由で転送され、データベース サーバー側では、localhost ループバック IP でサービスにアクセスできます。

于 2014-07-08T05:39:36.643 に答える