我尝试从servlet连接我的数据库(MySQL),但得到Connection refused error
。我读过像this这样的类似问题。但是:
您尚未启动服务器。
在我的本地服务器(Ubuntu server 16.04
)中,已安装IP 192.168.0.4
MySQL server
。 MySQL 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
任何提示可能是什么问题?
答案 0 :(得分:2)
如果您尝试远程连接MySql服务器,则问题出在MySql服务器网络配置中,它正在监听localhost
(127.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。