【发布时间】:2017-08-24 05:03:04
【问题描述】:
我尝试从 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
我也禁用了我电脑的防火墙,但它没有解决连接错误。
您的服务器有太多等待接受的挂起连接。
我的服务器是全新安装的,没有任何待处理的连接。
您的服务器没有监听连接。
我运行命令 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
我和服务器我们在同一个网络中。我处理与数据库通信的 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
任何提示可能是什么问题?
【问题讨论】:
-
您的数据库服务器正在监听本地主机,您使用外部 IP 地址。将
jdbc:mysql://192.168.0.4:3306/myDataBase更改为jdbc:mysql://localhost:3306/myDataBase