尝试在MySQL中连接时java.net.ConnectException

时间:2017-03-30 10:20:42

标签: java mysql jdbc netbeans

我尝试从servlet连接我的数据库(MySQL),但得到Connection refused error。我读过像this这样的类似问题。但是:

  

您尚未启动服务器。

在我的本地服务器(Ubuntu server 16.04)中,已安装IP 192.168.0.4 MySQL serverMySQL Server正在运行,因为命令service mysql status提供了此输出:

Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-03-21 11:50:56 EET; 1 weeks 1 days ago
Main PID: 1209 (mysqld)


  

您正在尝试连接错误的IP /端口。

MySQL正在侦听端口3306,作为命令netstat -an | grep 3306. 给出以下输出

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN


  

防火墙在您的连接到达服务器之前就阻止了它。

服务器的防火墙已被禁用,如ufw status

Status: inactive

我也禁用了我的PC防火墙,但它没有解决连接错误。


  

您的服务器有太多等待接受的待处理连接。

我的服务器已全新安装,无法建立任何挂起连接。


  

您的服务器没有侦听连接。

我运行commnand nmap -sT -O localhost,我得到了:

Not shown: 993 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
3306/tcp open  mysql

NETBEANS

我和服务器我们在同一个网络中。处理与DB通信的我的Java类包含:

private final String WEBAPP_DB = "jdbc:mysql://192.168.0.4:3306/myDataBase";
private final String JDBC_DRIVER="com.mysql.jdbc.Driver";
private final String USERNAME = "myUserName";
private final String PASSWORD = "myPassWord";

Connection c = null;
PreparedStatement stm = null;

sq = "SELECT * FROM Machines";
try {
    Class.forName(JDBC_DRIVER);
    c = DriverManager.getConnection(WEBAPP_DB, USERNAME, PASSWORD);
    stm = c.prepareStatement(sq);
    ResultSet rs = stm.executeQuery();

    while(rs.next()){
        System.out.println("Machine = " + rs.getInt("id"));
    }

} catch (SQLException e) {
    e.printStackTrace();
} finally {
    if (stm != null) {
        stm.close();
    }
    if (c != null) {
        c.close();
    }
}

我得到的一些错误是

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
...
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
...
Caused by: java.net.ConnectException: Connection refused: connect

任何提示可能是什么问题?

1 个答案:

答案 0 :(得分:2)

如果您尝试远程连接MySql服务器,则问题出在MySql服务器网络配置中,它正在监听localhost127.0.0.1):

Proto Recv-Q Send-Q Local Address           Foreign Address         State    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

应该是:

Proto Recv-Q Send-Q Local Address           Foreign Address         State    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN

或者至少,而不是0.0.0.0,您的服务器IP地址(192.168.0.4)。

我建议您阅读此How to Bind to Static IP address in MySQL

另一方面,如果您在本地连接(您的代码在MySql服务器上执行,该服务器与运行NetBeans的机器相同),您应该将连接字符串更改为jdbc:mysql://localhost:3306/myDataBase

P.S。所以在恢复你的问卷时:)

  

您正在尝试连接错误的IP。