2

このトピックに関するスレッドはほとんど見たことがありませんが、何が問題なのかまだわかりません。コードは次のとおりです。

import java.sql.*;

public class SQL
{
    public static void main(String[] args) 
    {
        Connection conn = null;
        String url = "jdbc:mysql://mysql1.oyo.co.il:3306/";
        String dbName = "sdarot2_winner";
        String driver = "com.mysql.jdbc.Driver";
        String userName = ""; 
        String password = "";
        String table = "LEADER_CAM_PRODUCTS";

        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,userName,password);
            System.out.println("Connected to the database");
            conn.close();
            System.out.println("Disconnected from database");

        }catch (Exception e) {
            System.out.println(e);
        }
  }
}

そして、ここに私が得るエラーがあります:

com.mysql.jdbc.CommunicationsException: 基礎となる > > 例外による通信リンク障害:

** ネストされた例外の開始 **

java.net.ConnectException メッセージ: 接続がタイムアウトしました: 接続

スタックトレース:

java.net.ConnectException: 接続がタイムアウトしました: java.net.PlainSocketImpl.socketConnect(ネイティブ メソッド) で java.net.PlainSocketImpl.doConnect(不明なソース) で java.net.PlainSocketImpl.connectToAddress(不明なソース) で接続します。 net.PlainSocketImpl.connect(不明なソース) で java.net.SocksSocketImpl.connect(不明なソース) で java.net.Socket.connect(不明なソース) で java.net.Socket.connect(不明なソース) で java.net. java.net.Socket のソケット (ソース不明)。com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) のソケット。com.mysql.jdbc.MysqlIO.(MysqlIO.java:271) の。 com.mysql.jdbc.Connection.createNewIO(Connection.java:2744) com.mysql.jdbc.Connection.(Connection.java:1553) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) java.sql.DriverManager.getConnection で (不明なソース) java.sql.DriverManager.getConnection で (不明なソース) SQL.main で (SQL.java:17)

** ネストされた例外の終了 **

サーバーに送信された最後のパケットは 1 ミリ秒前です。

ここに私が見つけたいくつかのことがあります:

  1. IP/ドメインまたはポートが正しくありません
  2. IP/ドメインまたはポート (つまり、サービス) がダウンしています
  3. IP/ドメインがデフォルトのタイムアウトよりも応答に時間がかかっています
  4. 使用しているポートに関係なく、要求または応答をブロックしているファイアウォールがあります
  5. その特定のホストへのリクエストをブロックしているファイアウォールがあります
  6. インターネット アクセスがダウンしています

a) 正しいです。b)そのデータベースで現在動作しているウェブサイトを取得したので、ダウンしていません。c) どうすればそれを確認できますか?私が言ったように、このデータベースで実行中の Web サイトを取得したので、それが問題だとは思いません。d) 上で述べたのと同じ理由で、今はそうです。e) dと同じ

では、私が間違っていることは何ですか?PHPコードはSQLで機能するのに、Javaでエラーが発生するのはなぜですか? ありがとうございました。

4

2 に答える 2

3

実験として、mysql1.oyo.co.ilシステムの telnet コマンドを使用してポート 3306 に接続してみてください。または、未加工の TCP/IP 接続を開く その他のユーティリティ (ncまたは など)。OS / ディストリビューションによっては、このトラブルシューティングに役立つ適切なコマンドを見つけてインストールする必要がある場合があります。 何が起こるか観察してください。netcat


あなたの診断について:

a) 正しいです。

そう言えば…

b)そのデータベースで現在動作しているウェブサイトを取得したので、ダウンしていません。

せいぜい、ホストが機能していることを示しただけです。ポート 80 の Web サービスとポート 3306 の MySQL サービスは異なるサービスです。(そして実際、mysql1.oyo.co.ilさまざまなポートのトラフィックがさまざまなホストまたは仮想ホストに透過的にルーティングされるように、巧妙なパケット ルーティング トリックを実行している可能性があります。)

c) どうすればそれを確認できますか?

タイムアウトを変更または増やしてみてください。

私が言ったように、このデータベースで実行中のウェブサイトを取得したので、それが問題だとは思いません。

タイムアウトの問題ではないと思いますが、上で述べたように、Web サイトを取得したという事実は、MySQL サービスが実行されているかどうかについては何も言いません。

d) 上で述べたのと同じ理由で、今はそうです。

ポート80に到達できることを実証しただけです...上記を参照してください

e) dと同じ

ポート80に到達できることを実証しただけです...上記を参照してください


上記に基づいて、次のことが妥当と考えられます。

  • ローカル ファイアウォールに問題がある場合、
  • そのポートの MySQL サービスは現在実行されていません。
  • サービス側のネットワーク ルーティングは、そのポートのトラフィックに対して壊れています。
  • MySQL サービスが完全にオフになっている、または
  • サービスのファイアウォールは、あなたの場所を含むランダムな (または特定の) 場所からのネットワーク接続を受け入れないように構成されています。

「接続拒否」ではなくタイムアウトが表示されているという事実は、これが MySQL サービス エンドポイント自体の問題よりもネットワークまたはファイアウォールの問題である可能性が高いことを示唆しています。

私の推測では、「彼ら」はサービスを撤回しました...そして、あなたはもうそれを使うべきではないと思います. (パブリック MySQL データベース サービスを提供することは、奇妙なことだと思います...セキュリティと管理の観点からも問題があります。)

于 2012-12-05T09:52:14.493 に答える
1

「接続がタイムアウトしました」は、次のいずれかを示します。

  • 接続要求を意図的に無視しているサーバー側のファイアウォール
  • IP パケットが通過しないなどのネットワーク トポロジの問題
  • サーバーホスト自体がダウンしています。

ほとんどの場合、それは最初です。

ここでの他の回答とは対照的に、サーバープログラムがダウンしていること、またはクライアントでのローカルファイアウォールの問題を示しているわけではないことに注意してください。前者は「接続が拒否されました」を引き起こし、後者はプラットフォームに応じて「許可が拒否されました」という行に沿って何かを与えるでしょう.

于 2012-12-05T21:33:53.343 に答える