尝试在 MySQL 中连接时出现 java.net.ConnectException [重复]
Posted
技术标签:
【中文标题】尝试在 MySQL 中连接时出现 java.net.ConnectException [重复]【英文标题】:java.net.ConnectException when trying to connect in MySQL [duplicate] 【发布时间】: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
【参考方案1】:
如果您尝试远程连接您的 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
附:因此,在恢复您的问卷调查时:)
您正在尝试连接到错误的 IP。
【讨论】:
感谢您提供的所有信息!我没有在本地连接,所以我必须找到如何更改 MySQL 正在监听的位置.. 只需编辑my.cfg
文件并编辑bind-address = 0.0.0.0
- 阅读How to Bind to Static IP address in MySQL
谢谢!在Ubuntu 16.04
中,文件位于/etc/mysql/mysql.conf.d/mysqld.cnf
@yaylitzis 很棒 ;)以上是关于尝试在 MySQL 中连接时出现 java.net.ConnectException [重复]的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 servlet 连接 mySql 时出现“java.lang.ClassNotFoundException”
MySQL 7.0.6-IR3 版本尝试连接数据库时出现问题
Spring Boot,Java,Docker Compose,尝试在两个容器(mysql,my-api)之间建立连接时出现“连接被拒绝”