Java Driver.getConnection() 在实时系统上从 mysql 产生 "Connection Refused",而不是开发

标签 java mysql jdbc

非常简单的东西,这里 -- 我只是对 mysql 不够好,无法理解它对我的要求。

我有一个简短的 java 测试用例,它在我的开发系统上打开 mysql 上的连接,但是当我尝试将它放到我的服务器时,它失败了。

如果您能提供帮助,我们将不胜感激。

谢谢!

测试代码

import  java.util.*;
import  java.sql.*;

public  class   mysqltest {

    static  public  void  getDBConnection() {
        System.out.println ("Start of getDBConnection.");

        Connection  conn        = null;
        String      url         = "jdbc:mysql://localhost:3306/";
        String      dbName      = "magnets_development";
        String      driver      = "com.mysql.jdbc.Driver";
        String      userName    = "*****";  // blanked for publication
        String      password    = "*****";

        try {
            Class.forName (driver).newInstance();
            System.out.println ("driver.newInstance gotten.");
            conn = DriverManager.getConnection (url+dbName, userName, password);
            System.out.println ("Connection gotten: " + conn + ".");
            Statement sql     = conn.createStatement ();
            ResultSet results = sql.executeQuery ("use " + dbName + ";");
        }
        catch (Exception ex) {
            System.out.println ("*** Got exception.");
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        System.out.println ("Main started.");
        mysqltest.getDBConnection();
    }
}

开发系统输出 (预期/正确响应)

olie$ java mysqltest
Main started.
Start of getDBConnection.
Properties set.
driver.newInstance gotten.
Connection gotten: com.mysql.jdbc.Connection@c980c9.
olie$ 

服务器输出 (我正在尝试追踪错误)(删除了一些空白行。)

mini$ java mysqltest
Main started.
Start of getDBConnection.
Properties set.
driver.newInstance gotten.
*** Got exception.
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection refused

STACKTRACE:

java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:520)
    at java.net.Socket.connect(Socket.java:470)
    at java.net.Socket.<init>(Socket.java:367)
    at java.net.Socket.<init>(Socket.java:209)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:525)
    at java.sql.DriverManager.getConnection(DriverManager.java:140)
    at mysqltest.getDBConnection(mysqltest.java:34)
    at mysqltest.main(mysqltest.java:49)

** END NESTED EXCEPTION **

Last packet sent to the server was 3 ms ago.
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:525)
    at java.sql.DriverManager.getConnection(DriverManager.java:140)
    at mysqltest.getDBConnection(mysqltest.java:34)
    at mysqltest.main(mysqltest.java:49)
mini$ 

最佳答案

只是关于这个主题的有用说明。我花了至少 30 分钟尝试调试相同的错误,这是我的错误。

在我的 MySQL conf 文件中,我碰巧将 BIND ADDR 设置为机器的 IP。我没有将它设置为 127.0.0.10.0.0.0。因此 MySQL 会接受来自外部而非内部的 JDBC 连接。仅当从本地计算机连接时,我才收到 Connection Refused。

将该地址更改为 0.0.0.0 允许它监听对任何 IP 的请求。这允许内部和外部 IP。

希望这对犯了与我相同的愚蠢错误的人有所帮助。用上面关于 netstat -an | 的评论检查它grep 3306

关于Java Driver.getConnection() 在实时系统上从 mysql 产生 "Connection Refused",而不是开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366861/

相关文章:

java - 如果 Java 的 Gradle 常规目录结构发生更改,.class 文件将在哪里创建?

mysql - SQL 计数等于 1 个值的记录,并对其余的进行计数和分组

mysql - Doctrine 查询生成器 : FIND_IN_SET doesn't work

java - 使用 JDBC 驱动程序锁定 oracle 数据库中的表

java - type2 的 mysql 数据库的驱动程序名称和 url 是什么

postgresql - PWS - 无法将 UAA 连接到数据库

java - Spring:如何使用泛型在 Spring 配置中注入(inject) ENUM?

java - 为什么 Execute Aroud 习语不被视为策略设计模式?

java - Gradle无法建立,查找或加载主类

java - PreparedStatement 不适用于 substring_index?