3

localhost経由で JDBC から MySQL に接続しようとしています。しかし、接続は失敗します。例外では、JDBC が127.0.0.1に接続しようとしていることがわかります

    String connectionString = "";
    try {
        loadProperties();
        Class.forName("com.mysql.jdbc.Driver");
        // Setup the connection with the DB
        connectionString = "jdbc:mysql://" + properties.getProperty("host") + "/" + properties.getProperty
                ("database") + "?user=" + properties.getProperty("user") + "&password=" + properties
                .getProperty
                        ("password");
        connect = DriverManager
                .getConnection(connectionString);
        logger.debug("Connected to " + properties.getProperty("host"));
    } catch (Exception e) {
        logger.error("Database Connection failed with connection string - " + connectionString,e);
    }

ログから:

Database Connection failed with connection string - jdbc:mysql://localhost/testdb?user=testuser&password=testpass

java.sql.SQLException: Access denied for user 'testuser'@'127.0.0.1' (using password: YES)

localhost を 127.0.0.1 に置き換えるのはなぜですか? ローカルホストのみのログインを構成しました。

4

2 に答える 2

6

同じ問題に遭遇したときに、この質問に出くわしました。

「localhost を 127.0.0.1 に置き換えるのはなぜですか?」という質問に答えるには:

MySQL docsから、接続 URLで使用localhostすると、ソケットに接続することを意味します。Using127.0.0.1は、TCP/IP 経由で接続することを意味します。

Unix では、MySQL プログラムはホスト名 localhost を特別に扱います。その方法は、他のネットワーク ベースのプログラムと比べて予想とは異なる可能性があります。localhost への接続の場合、MySQL プログラムは Unix ソケット ファイルを使用してローカル サーバーへの接続を試みます。... クライアントがローカル サーバーへの TCP/IP 接続を確実に確立するには、 --host または -h を使用してホスト名の値 127.0.0.1 を指定します。

この回答によると、デフォルトでは、JDBC は少なくとも一部の Java バージョンでは TCP/IP 接続のみをサポートしているようです。元のソース: http://lists.mysql.com/java/8749 :

Java自体はUNIXドメインソケットをサポートしていません

したがって、JDBC は TCP/IP 経由でのみ接続するため、内部的に変換localhostされると思います 。127.0.0.1

私の場合の問題を解決するには:

  • MySQLで許可を与えましたuser@127.0.0.1
  • 接続 URLを に変更localhostしました。127.0.0.1
于 2016-01-04T21:52:31.950 に答える
1

IP アドレス 127.0.0.1 は、各コンピューターで使用するために予約された特別な目的のアドレスです。127.0.0.1 は通常、コンピュータのループバック アドレスです。ネットワーク ソフトウェアとユーティリティは、127.0.0.1 を使用してローカル コンピュータの TCP/IP ネットワーク リソースにアクセスできます。127.0.0.1 のようなループバック IP アドレスに送信されたメッセージは、外部のローカル エリア ネットワーク (LAN) には到達しませんが、代わりにコンピューター自体のネットワーク アダプターによって TCP/IP スタックの受信側に自動的に再ルーティングされます。簡単に言うと、localhost は 127.0.0.1 とも呼ばれます。MySql アクセス権限に問題があります。このリンクは解決に役立ちます

于 2013-10-20T16:43:21.120 に答える