com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
Posted
技术标签:
【中文标题】com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障【英文标题】:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 【发布时间】:2010-06-06 05:49:10 【问题描述】:我正在努力让我的数据库与我的 Java 程序对话。
谁能给我一个使用 JDBC 的快速而肮脏的示例程序?
我遇到了一个相当惊人的错误:
Exception in thread "main" 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.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
Caused by: 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.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: 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:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 13 more
测试文件内容:
import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlTest
public static void main(String [] args) throws Exception
// Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// // edit the jdbc url
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/projects?user=user1&password=123");
// Statement st = conn.createStatement();
// ResultSet rs = st.executeQuery( "select * from table" );
System.out.println("Connected?");
【问题讨论】:
我是个笨蛋。 MySQL服务器未启动:(启动成功。 我将 Springboot 数据源从 url:jdbc:mysql://XXX208465:localhost:3306/orv21_kafka_schema 更改为 url:jdbc:mysql://localhost:3306/orv21_kafka_schema。所以不需要 XXX208465,这是我笔记本电脑的主机名。我在本地安装了 mysql 并通过 mySQL CLI 使用它 【参考方案1】:所以,你有一个
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 java.net.ConnectException:连接被拒绝
我引用 this answer 的内容,其中还包含 MySQL+JDBC 分步教程:
如果您收到
SQLException: Connection refused
或Connection timed out
或特定于MySQL 的CommunicationsException: Communications link failure
,则意味着根本无法访问数据库。这可能有以下一种或多种原因:JDBC URL 中的 IP 地址或主机名错误。 本地 DNS 服务器无法识别 JDBC URL 中的主机名。 JDBC URL 中的端口号缺失或错误。 数据库服务器已关闭。 数据库服务器不接受 TCP/IP 连接。 数据库服务器已用完连接。 Java 和 DB 之间的某些东西阻塞了连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
使用
ping
验证和测试它们。 刷新 DNS 或改用 JDBC URL 中的 IP 地址。 根据 MySQL DB 的my.cnf
进行验证。 启动数据库。 验证mysqld是否在没有--skip-networking option
的情况下启动。 重新启动数据库并相应地修复您的代码以关闭finally
中的连接。 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
另见:
How should I connect to JDBC database / datasource in a servlet based application? Is it safe to use a static java.sql.Connection instance in a multithreaded system?【讨论】:
MAMP/ MAMP Pro 默认设置 MAMP_skip-networking_MAMP。您必须在 my.cfn 中禁用此行 不是这种情况,但是当您使用连接池并且连接由于长时间不活动而关闭时,也会发生通信链接故障。只有在这种情况下,它才会显示“最后一个数据包是在“X”秒前收到的” @nikel 不应该通过触发“select 1”验证查询来保持连接池中的线程处于活动状态吗?当我们将 evictor 设置为以比 mysql 服务器超时更短的时间间隔运行时,为什么它们会因长时间不活动而关闭? 是的,验证查询可以解决这个问题。我的观点是关于未设置且池中的连接由于不活动而超时的情况 我有同样的问题,我通过更改 jdbc 驱动程序版本解决了它,它工作得很好【参考方案2】:就我而言,我需要将 Localhost 替换为实际的数据库服务器 IP 地址
代替
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/DBname", "root", "root");
我需要
Connection con = DriverManager.getConnection(
"jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
【讨论】:
在 2018 年 4 月 5 日的最新更新中:目前,我使用的是 MySQL Workbench 6.3。我来这里是为了检查解决方案,但我自己找到了,只是您的 MySQL 服务器没有运行或已停止。我重新启动了我的服务器,它就像一个魅力。 这是“最佳解决方案”,为什么?它解决了什么问题,如何解决? 此解决方案无法生成数据帧【参考方案3】:当 Java 堆外时,我捕获了这个异常。如果我尝试将许多数据项放入 RAM - 首先我会捕获“Communications link failure”,然后是“OutOfMemoryError”。
我记录了它并减少了内存消耗(删除 1/2 数据),一切正常。
【讨论】:
【参考方案4】:如果您的数据库连接长时间空闲,则会出现此com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
异常。
这个空闲连接在connection.isClosed();
上返回true,但是如果我们尝试执行语句,那么它会触发这个异常,所以我建议使用数据库池。
【讨论】:
它也会因为“连接被拒绝”等其他原因而发生。【参考方案5】:在我的情况下,原来是mysql-connector-java
的版本太旧了。
在我的演示中,我以某种方式使用 mysql-connector-java
,如下所示:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
但是在开发环境中,我用的是这个:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
我的 MySQL 版本是 5.1.48(是的,它很旧,只是为了模仿产品版本)。所以我遇到了同样的错误。
既然找到了原因,也就找到了解决办法。匹配版本!
【讨论】:
不太可能。所有这些驱动程序版本都应该向后兼容。 这个问题似乎在新的 mysql 连接器中得到修复,见***.com/questions/14559794/… 对我来说同样的情况。驱动版本是MySQL 5,而服务器版本是8。所以我更新了jar的版本,问题解决了。【参考方案6】:几个小时以来我一直遇到同样的问题。我正在使用 MAMP 服务器
不要使用 localhost:[Apache Port],而是使用您的 MySQL 端口。
以下是 MAMP 服务器的默认 MySQL 端口。
String url = "jdbc:mysql://localhost:8889/db_name";
Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
【讨论】:
如果你在安装Mysql之前有mamp,那么试试这个方法【参考方案7】:我可能在这里找错了树,但您的异常似乎表明您的 MySQL 服务器不可用。
线程“主”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 中的异常: 通信链路故障最后一个成功发送到服务器的数据包为 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。在...
如果你尝试(从终端)会发生什么
mysql -u username -p
系统将提示您输入与用户名关联的密码。输入正确密码后,mysql客户端是否连接?
如果没有,您可能必须从首选项中启动 MySQL。您也可以将其设置为在启动时运行。
【讨论】:
我正在使用 MAMP 运行我的 MySQL 服务器。这会是个问题吗? 当我(通过 Sequal Pro)连接到我的localhost
时,我使用了正确的用户名/密码,并且工作正常。【参考方案8】:
较早的答案是合适的。但是,我还想指出一个更普遍的问题。
我遇到了类似的问题,原因是我公司的网络限制。
当我在任何其他网络中时,相同的连接正在成功。
【讨论】:
这个指针解决了我的问题,当我连接到 *** 时,指定 'localhost' 工作正常,但如果我从 *** 断开连接,同样不能工作,但是我通过将 'localhost' 更改为 '127.0. 0.1'【参考方案9】:如果 Java 尝试通过 SSL 连接到 MySQL,也可能会发生此错误,但出现问题。 (就我而言,我正在将 Payara Server 5.193.1 连接池配置到 MySQL。)
有人建议设置useSSL=false
。但是,由于 Connector/J 版本 8.0.13
,该设置已被弃用。这是MySQL Connector/J 8.0 Configuration Properties的摘录:
ssl模式
默认情况下,网络连接是 SSL 加密的;此属性允许关闭安全连接,或选择不同的安全级别。允许以下值:
DISABLED
- 建立未加密的连接;PREFERRED
- (默认)如果服务器启用了加密连接,则建立加密连接,否则回退到未加密连接;REQUIRED
- 如果服务器启用了安全连接,则建立安全连接,否则失败;VERIFY_CA
- 与REQUIRED
类似,但另外根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书;VERIFY_IDENTITY
- 与VERIFY_CA
类似,但另外验证服务器证书是否与尝试连接的主机匹配。此属性替换了已弃用的旧属性
useSSL
、requireSSL
和verifyServerCertificate
,它们仍然被接受,但如果sslMode
未明确设置,则转换为sslMode
的值:useSSL=false
已转换给sslMode=DISABLED
;"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"
被翻译成sslMode=PREFERRED
;"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"
被翻译成sslMode=REQUIRED
;"useSSL=true" AND "verifyServerCertificate=true"
被翻译成sslMode=VERIFY_CA
。sslMode=VERIFY_IDENTITY
没有等效的旧设置。请注意,对于所有服务器版本,sslMode
的默认设置为PREFERRED
,它相当于useSSL=true
、requireSSL=false
和verifyServerCertificate=false
的旧设置,它们与它们的默认设置不同在某些情况下,Connector/J 8.0.12 和更早版本。应审查继续使用旧属性并依赖其旧默认设置的应用程序。如果显式设置了
sslMode
,则忽略旧属性。如果没有明确设置sslMode
或useSSL
,则应用默认设置sslMode=PREFERRED
。默认:
PREFERRED
自版本:8.0.13
因此,就我而言,设置sslMode=DISABLED
就是解决问题所需要的。
这是在测试机器上。但对于生产来说,安全的解决方案是正确配置 Java 客户端和 MySQL 服务器以使用 SSL。
请注意,通过禁用 SSL,您可能还需要设置 allowPublicKeyRetrieval=true
。 (同样,从安全角度来看,这不是一个明智的决定)。 MySQL ConnectionString Options提供更多信息:
允许公共密钥检索
如果用户账号使用
sha256_password
认证,传输过程中必须保护密码; TLS 是首选的机制,但如果它不可用,则将使用 RSA 公钥加密。要指定服务器的 RSA 公钥,请使用ServerRSAPublicKeyFile
连接字符串设置,或设置AllowPublicKeyRetrieval=True
以允许客户端自动向服务器请求公钥。请注意,AllowPublicKeyRetrieval=True
可能允许恶意代理执行 MITM 攻击以获取明文密码,因此默认为 False,必须显式启用。
【讨论】:
来自Payara Server GitHub的相关帖子。【参考方案10】:就我而言,解决方案是将预期的 TLS 协议添加到连接字符串中,如下所示:
jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2
【讨论】:
非常感谢!我扯着头发想知道怎么了。我可以使用 MySQL Workbench 进行连接,但不能通过 Java 代码和连接字符串来连接我认为是相同的 RDS 实例。 欢迎。很高兴我的回答帮助您解决了这个问题。 也非常感谢我。我花了很多时间寻找你的答案。【参考方案11】:我得到了同样的错误,因为我试图在不启动 mysql 服务器的情况下运行我的程序。
启动mysql服务器后,一切正常。
【讨论】:
【参考方案12】:请在 /etc/mysql/my.cnf 文件中更新您的 IP 地址
bind-address = 0.0.0.0
重启mysql守护进程和mysql服务。
【讨论】:
编辑使用有效的绑定地址【参考方案13】:在Mysql 下载 MySQL-JDBC-Type-4-Treiber(例如,来自“mysql-connector-java-5.1.11.zip”的“mysql-connector-java-5.1.11-bin.jar”)。
您需要在编译和运行时在类路径中包含驱动程序 jar。
Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
【讨论】:
不,给我一个关于找不到任何东西的错误风暴。是否可以在没有 JAR 文件的情况下导入它? @Josh 这行得通,你真的只需要正确设置你的类路径。 (或者将 jar 复制到您的 %JAVA_HOME%\jre\lib\ext 目录中,但这被认为是不好的做法)【参考方案14】:我的同样问题通过以下步骤解决:
转到my.cnf
vi /etc/mysql/my.cnf
修改其绑定地址
"bind-address = 0.0.0.0"
重启 MySQL
sudo /etc/init.d/mysql restart
【讨论】:
【参考方案15】:如果您使用WAMP
或XAMP
服务器安装mysql 数据库。
然后你必须明确启动mysql服务器,否则它会显示
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
连接数据库时
【讨论】:
【参考方案16】:我以一种简单的方式解决了这个问题,这对我有用。我遇到了问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接故障”。在我的 db.properties 文件中,我有这个:url:jdbc:mysql://localhost:90/myDB, 只删除了端口 url ,导致这种方式 url:jdbc:mysql://localhost/myDB 对我有用。
【讨论】:
【参考方案17】:当我在 my.ini 和 php.ini 文件中将 mysql 端口从 3306 更改为 3307 时,这发生在我身上,但在将端口 (3307->3306) 更改回来后,它又可以正常工作了。
【讨论】:
【参考方案18】:如果您更改了端口,则会收到此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure” 请检查您的端口号
【讨论】:
【参考方案19】:尝试将localhost
更改为127.0.0.1
。
本地主机将被解析为::1
。并且 MySQL 默认无法通过 IPv6 连接。
这是telnet localhost 3306
的输出:
$ telnet localhost 3306
Trying ::1...
并且没有来自 MySQL 服务器的响应。
当然,请确保您的 MySQL 服务器正在运行。
【讨论】:
这实际上是你的 /etc/hosts 文件的问题,而不是 Mysql @cricket_007 默认情况下,localhost 解析为 ::1 而不是 127.0.0.1。 当然,只有启用了 ipv6 并且取决于主机文件【参考方案20】:dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321
con = DriverManager.getConnection(dbhost, user, password);
如果 mysql 版本 8 或更高版本用户更新了连接器
【讨论】:
这是正确的答案,只需在使用 MySQL 驱动程序 8 或更高版本时将 useSSL=false 添加到连接字符串即可。 尝试了很多其他修复。但这行得通。【参考方案21】:在我的情况下,原来是 mysql-connector-java 的版本不同。 我刚把mysql jdbc改成maria jbdc
旧的 jdbc 驱动
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
新的 Jdbc 驱动程序
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.2</version>
</dependency>
【讨论】:
MariaDB 是 MySQL 的一个分支,但实际上它们是两个不同的数据库。在这种情况下,您建议使用其他 JDBC 驱动程序不是解决方案,这是由于服务器未启动造成的。 谢谢,但在浪费了许多小时没有成功之后,它对我有用。只是想与他人分享。也许它可以帮助并节省时间。 已经在这里待了将近 1 个小时,这是唯一有效的方法。谢谢@adnan【参考方案22】:刚刚经历过。
必须通过以下方式使其工作: (这个可以放在静态块初始化器中)
static // would have to be surrounded by try catch
Class.forName("com.mysql.jdbc.Driver"); // this will load the class Driver
也可以通过以下方式获取连接:
conn = DriverManager.getConnection(DBURL,<username>,<password>);
而不是指定登录参数
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
问候。
【讨论】:
自 2007 年以来不再需要静态块,您可以指定任何一种方式的登录参数。【参考方案23】:对于远程调用Mysql
将远程用户添加到Mysql,例如IP=remoteIP:
mysql -u xxxx -p //local coonection to mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
//Query OK, 0 rows affected (xx sec)
mysql> FLUSH PRIVILEGES;
//Query OK, 0 rows affected
允许远程访问 Mysql(默认不允许所有外部调用):
Edit
/etc/mysql/mysql.conf.d/mysqld.cnf or /etc/mysql/my.cnf
Change line: bind-address = 127.0.0.1 to
bind-address = 0.0.0.0
Restart Mysql: /etc/init.d/mysql restart
对于最新版本的 JDBC 驱动程序,JDBC :
jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC'
jdbc.user='theNewUser'
【讨论】:
【参考方案24】:我在远程 Jenkins 服务器上运行自动化测试时遇到了这个问题。但是,在本地运行测试时没有出现任何问题。
对我来说,在将 mysql-connector 版本更新到 POM 文件中的最新版本后,这个问题得到了解决,因为 MySQL 版本在服务器端发生了更改。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
但同样的调试结果有点困难,花了将近两天的时间,因为我不知道 MySQL 版本的变化,而且它在本地运行良好。
【讨论】:
你为我节省了很多调试时间。我遇到了完全相同的情况,从“8.0.16”更新到“8.0.25”修复了它。对 mysql 连接器开发人员在补丁版本中破坏兼容性感到羞耻。【参考方案25】:我遇到了同样的问题,解决方法如下:
-
我的 .jsp 正在调用我尚未在
servlet。
我有两个列名,我通过
ResultSet (getString("columnName"))
传递给一个对象,这与我的数据库中的列名不匹配。
我不确定是哪一个解决了这个问题,但它确实有效。此外,请务必为每个表查询创建一个新的 Statement
和 ResultSet
。
【讨论】:
(1)当然不会引起这个问题。【参考方案26】:这可能是一个简单的 jar 问题。可能您使用的是旧的mysql-connector-java-XXX-bin.jar
,您当前的 mysql 版本不支持它。我使用mysql-connector-java-5.1.18-bin.jar
就像我使用mysql 5.5
一样,这个问题已经为我解决了。
【讨论】:
是的,可能存在 jar 不匹配的可能性。 所有这些驱动版本都应该是兼容的。【参考方案27】:也许你没有启动你的 Mysql 和 Apache 服务器。我从 XAMPP 控制面板启动 Apache 服务器和 Mysql 后,连接成功。
祝你好运!
【讨论】:
【参考方案28】:对我来说解决的是做两件事: 1. 使用以下 connads 使用一些密码创建除 root 以外的新用户:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
2。在 mysqld.conf 上注释 IP 地址行
然后用新的用户名和密码连接。它应该可以工作。
【讨论】:
您需要对所有远程用户重复此操作,或者添加通配符而不是 Localhost【参考方案29】:它试图连接到旧版本的 MySQL ('version', '5.1.73' );当您使用较新的驱动程序版本时,您会收到一条错误消息,告诉您使用 "com.mysql.cj.jdbc.Driver 甚至您不必指定使用哪个驱动程序:
加载类
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver'。司机是 通过 SPI 自动注册并手动加载驱动程序 类通常是不必要的。
我将声明更改为使用 mysql-connector-java 的 5.1.38 版本,并且在代码中,我保留了 com.mysql.jdbc.Driver。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
当我看到 Ankit Jain 的 answer 时,一切都开始了
【讨论】:
【参考方案30】:我的防火墙阻止了我的 MySQL 监听的 3307 帖子。于是我把端口从3307改成了3306,就可以成功连接数据库了。
【讨论】:
以上是关于com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障的主要内容,如果未能解决你的问题,请参考以下文章
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目 '' 键 'PRIMARY'
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障?
错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表不存在
使用 JDBC 访问远程 MySQL 数据库时出现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障