com.mysql.jdbc.exceptions.jdbc4。CommunicationsException:通信链路故障

我正在努力让我的数据库与我的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?");
}
}
887831 次浏览

下载MySQL-JDBC-Type-4-Treiber (i.g。` mysql-connector-java-5.1.11-bin.jar `从` mysql-connector-java-5.1.11.zip `)在Mysql

在编译和运行时期间,您需要在类路径中包含驱动程序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" );

我可能找错了对象,但您的异常似乎表明您的MySQL服务器不可用。

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 日志含义通信链路故障最后一个成功发送到服务器的报文为0 毫秒前。驱动未收到服务器的报文。处理步骤在…< / p >

如果你尝试(从终端)会发生什么?

mysql -u username -p

系统将提示您输入与用户名关联的密码。在你给出正确的密码后,mysql客户端连接吗?

如果没有,你可能需要从首选项启动MySQL。您还可以将其设置为在启动时运行。

你有一个

< p > com.mysql.jdbc.exceptions.jdbc4。CommunicationsException:通信链路故障
connectexception: Connection refused

我引用了这个答案,其中还包含一个循序渐进的MySQL+JDBC教程:

如果你得到一个SQLException: Connection refusedConnection timed out或MySQL特定的CommunicationsException: 通信链路故障,则意味着数据库根本不可达。这可能有以下一个或多个原因:

  1. JDBC URL中的IP地址或主机名错误。
  2. 本地DNS服务器无法识别JDBC URL中的主机名。
  3. JDBC URL中端口号缺失或错误。
  4. DB服务器故障。
  5. DB服务器不接受TCP/IP连接。
  6. 数据库服务器连接不足。
  7. Java和DB之间的某些东西阻塞了连接,例如防火墙或代理。
    < br >

要解决这两个问题,请遵循以下建议:

  1. ping验证并测试它们。
  2. 刷新DNS或在JDBC URL中使用IP地址。
  3. 根据MySQL DB的my.cnf进行验证。
  4. 启动DB。
  5. 验证mysqld是否在没有--skip-networking option的情况下启动。
  6. 重新启动DB并相应地修复代码,使其关闭finally中的连接。
  7. 关闭防火墙和/或配置防火墙/代理允许/转发端口。
    < br >

参见:

我得到了同样的错误,因为我试图运行我的程序没有启动mysql服务器。

启动mysql服务器后,一切正常。

刚刚经历过。

必须让它工作: (这个可以放在静态块初始化器中)

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");

的问候。

当Java出堆时,我捕捉到这个异常。如果我试图在RAM中放入许多数据项-首先我捕获“通信链路故障”,然后捕获“OutOfMemoryError”。

我记录了它,我减少了内存消耗(删除1/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");

我也遇到过同样的问题,我是这样解决的:

    中尚未定义的属性 李servlet。< / >
  1. 我有两个列名,我通过ResultSet (getString("columnName"))传递到一个对象中,它们与我的数据库中的列名不匹配。

我不太确定哪一个解决了这个问题,但它确实有效。另外,确保为每个表查询创建了一个新的StatementResultSet

请更新/etc/mysql/my.cnf文件中的IP地址

bind-address  = 0.0.0.0

重新启动mysql daemon和mysql服务。

我同样的问题是通过以下步骤解决的:

  1. 执行my.cnf

    vi /etc/mysql/my.cnf
    
  2. Modify its bind-address

    "bind-address = 0.0.0.0"
    
  3. Restart MySQL

    sudo /etc/init.d/mysql restart
    

这可能是一个简单的罐子问题。可能你正在使用一个旧的mysql-connector-java-XXX-bin.jar,它不支持你当前的mysql版本。我使用了mysql-connector-java-5.1.18-bin.jar,因为我正在使用mysql 5.5,这个问题为我解决了。

如果您正在使用WAMPXAMP服务器安装mysql数据库。 然后你必须显式启动mysql服务器,否则它会显示 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure连接数据库

如果你改变了你的端口,你会得到这样的错误"com.mysql.jdbc.exceptions.jdbc4。CommunicationsException:通信链路故障 请检查您的端口号

如果您的数据库连接长时间空闲,则会发生com.mysql.jdbc.exceptions.jdbc4.CommunicationsException异常。

这个空闲连接在connection.isClosed();上返回true,但如果我们尝试执行语句,那么它将触发此异常,因此我建议使用数据库池。

我用一种简单的方法解决了这个问题,这对我来说很有效。我遇到了一些问题"com.mysql.jdbc.exceptions.jdbc4。CommunicationsException:通信链路故障”。在我的数据库里。属性文件我有这个:url:jdbc:mysql://localhost:90/myDB 只删除了端口url,导致这种方式url:jdbc:mysql://localhost/myDB,这对我来说是有效的

同样的问题我已经困扰好几个小时了。我正在使用MAMP服务器

而不是使用localhost:[Apache端口],使用您的MySQL端口。

下面是MAMP服务器默认的MySQL端口。

String url = "jdbc:mysql://localhost:8889/db_name";


Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

当我在my.ini和php.ini文件中将mysql端口从3306更改为3307时,就发生了这种情况,但在更改端口(3307->3306)后,它又可以正常工作了。

在我的情况下,结果是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(是的,它是旧的,只是为了模仿产品版本)。所以我遇到了同样的错误。

既然找到了原因,解决办法也就找到了。匹配版本!

前面的答案是合适的。但是,我还想指出一个更普遍的问题。

我也遇到过类似的问题,原因是我所在公司的网络限制。

当我在任何其他网络时,同样的连接都是成功的。

如果有任何读者在访问远程服务器时遇到此问题:请确保端口是打开的

尝试将localhost更改为127.0.0.1

本地主机将被解析为::1。MySQL默认不支持IPv6连接。

下面是telnet localhost 3306的输出:

$ telnet localhost 3306
Trying ::1...

MySQL服务器没有响应。

当然,请确保您的MySQL服务器正在运行。

也许你没有启动你的Mysql和Apache服务器。我从XAMPP控制面板启动Apache服务器和Mysql后,连接成功建立。

好运!

我解决了两件事: 1. 使用以下命令创建非root用户,并设置密码
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. 注释mysqld.conf中的IP地址行

然后用新的用户名和密码连接。它应该会起作用。

试图连接到旧版本的MySQL ('version', '5.1.73') ); 当你使用一个较新的驱动程序版本时,你会得到一个错误,告诉你使用“com.mysql.cj.jdbc.Driver,甚至你不必指定你使用哪个:

加载类com.mysql.jdbc.Driver'。这是不赞成的。新 驱动类是com.mysql.cj.jdbc.Driver'。司机是 通过SPI自动注册和手动加载驱动程序

我将声明改为使用5.1.38版本的mysql-connector-java,并且在代码中保留了com.mysql.jdbc.Driver

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>

一切都始于我看到Ankit Jain的回答

我的防火墙阻止了我的MySQL监听的3307帖子。所以我把端口从3307改成了3306。然后我就可以成功地连接到数据库。

在我的MacBook中,只有重新安装新版本的eclipse EE并删除xamp、mysql或mamp等本地服务器,但只使用其中一个时,我才解决了这个错误…

我刚开始申请的时候也遇到过同样的问题,

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.

问题是在mysql文件/etc/mysql/mysql.conf.d / mysqld.cnf中,配置是这样的

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
所以我们可以看到绑定地址指向127.0.0.1,所以启动你的应用程序,一个简单的解决方案是,我们可以使用jdbc: mysql: / / 127.0.0.1:3306 /披萨店而不是jdbc: mysql: / / localhost: 3306 /披萨店将mysql连接到应用程序或另一个解决方案是,你可以检查和改变mysql配置为默认值。两种方案都可行。 我希望这对你们也有用。

对于Remote调用Mysql

  1. 添加远程用户Mysql from for example 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
    
  2. Allow remote access to Mysql (by default all externall call is not allowed):

    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
    
  3. For The latest version of JDBC Driver, the JDBC :

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
    
打开/etc/mysql/my.cnf文件: 改变下面的参数从

' bind-address = 127.0.0.1

Bind-address = 0.0.0.0 #允许所有系统连接

在mysql中针对特定的IP地址执行以下命令->

grant all privileges on dbname.* to dbusername@'192.168.0.3' IDENTIFIED BY 'dbpassword';

如果你想访问所有的IP地址,运行下面的命令:

grant all privileges on dbname.* to dbusername@'%' IDENTIFIED BY 'dbpassword';

在我的情况下,我必须建立一个ssh隧道到远程数据库,所有的设置都是正确的,测试与PhpStorm的连接也很成功。模式加载了,但数据不加载。相反,我得到的是:

[08S01] 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.

上面的建议都没用。出于任何原因,我试图通过简单地重新启动PhpStorm来解决问题,瞧,它工作了!

此外,您的服务器可能刚刚关闭。在Mac上,通过聚光灯导航到mySQL首选项面板。在那里,勾选复选框以在计算机启动时启动服务器并启动服务器。

我收到了多个错误,如:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at

我必须补充一句:

  • 在AndroidManifest.xml中,将<uses-permission android:name="android.permission.INTERNET"/>放在manifest标签的后面。

  • 将JDBC驱动程序添加到您的Gradle(或Maven)依赖项中。

我有同样的连接错误: 我的问题是我使用MySQL 8.0.15,但Java连接器是5.x.x

以下是我如何修复它。 1. 下载8.0.15。从Maven存储库: https://search.maven.org/search?q=g:mysql%20AND%20a:mysql-connector-java < / p >

  1. 在Eclipse IDE中,在资源管理器中选择“引用库” 鼠标右键>生成路径>配置生成路径 A.删除“mysql-connector-5.x.jar” b.单击“Add External JARs…”,选择mysql-connector-java-8.0.15.jar.

重新运行,问题就解决了。

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或更高的用户更新连接器

如果Java试图通过SSL连接MySQL,但出现了错误,也可能发生此错误。(在我的例子中,我将Payara Server 5.193.1连接池配置为MySQL。)

一些人建议设置useSSL=false。然而,由于Connector/J版本8.0.13,该设置已弃用。下面是MySQL连接器/J 8.0配置属性的节选:

sslMode

默认情况下,网络连接是SSL加密的;此属性允许关闭安全连接,或选择不同的安全级别。允许以下值:DISABLED -建立未加密的连接;PREFERRED -(默认)如果服务器启用了加密连接,则建立加密连接,否则退回到未加密连接;REQUIRED -建立安全连接,如果服务器启用他们,否则失败;VERIFY_CA -类似REQUIRED,但额外根据配置的证书颁发机构(CA)证书验证服务器TLS证书;VERIFY_IDENTITY -类似于VERIFY_CA,但是额外验证服务器证书是否与尝试连接的主机匹配。

此属性替换了已弃用的遗留属性useSSLrequireSSLverifyServerCertificate,这些属性仍然被接受,但如果sslMode未显式设置,则转换为sslMode的值:{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}被转换为sslMode=PREFERRED;{"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}被转换为requireSSL0;requireSSL1被转换为requireSSL2。requireSSL3没有等效的遗留设置。注意,对于所有服务器版本,sslMode的默认设置是requireSSL5,它等价于requireSSL6、requireSSL7和requireSSL8的遗留设置,在某些情况下,这些设置与Connector/J 8.0.12和更早版本的默认设置不同。应该检查继续使用遗留属性并依赖其旧默认设置的应用程序。

如果显式地设置了sslMode,则遗留属性将被忽略。如果没有显式地设置sslModeuseSSL,则应用sslMode=PREFERRED的默认设置。

默认的: PREFERRED

从版本: 8.0.13

所以,在我的情况下,设置sslMode=DISABLED是我解决这个问题所需要的。 这是在一台测试机器上。但是对于生产环境,安全的解决方案是正确地配置Java客户端和MySQL服务器以使用SSL

注意,通过禁用SSL,您可能还必须设置allowPublicKeyRetrieval=true。(同样,从安全角度来看,这不是一个明智的决定)。进一步的信息在MySQL ConnectionString选项中提供:

AllowPublicKeyRetrieval

如果用户帐户使用sha256_password身份验证,则密码在传输过程中必须受到保护;TLS是这方面的首选机制,但如果它不可用,则将使用RSA公钥加密。要指定服务器的RSA公钥,使用ServerRSAPublicKeyFile连接字符串设置,或设置AllowPublicKeyRetrieval=True以允许客户端自动从服务器请求公钥。请注意,AllowPublicKeyRetrieval=True可能允许恶意代理执行MITM攻击以获取明文密码,因此它默认为False,必须显式启用。

示例jdbc连接类文件。当你想要获得一个连接时,简单地调用getConnection方法。包含相关的mysql-connector.jar

import java.sql.Connection;
import java.sql.DriverManager;




public class DBConnection {


public Connection getConnection() {
Connection con = null;


String dbhost;
String user;
String password;
// get properties
dbhost="jdbc:mysql://localhost:3306/cardmaildb";
user="root";
password="123";


System.out.println("S=======db Connecting======");


try {
Class.forName("com.mysql.jdbc.Driver");


con = DriverManager.getConnection(dbhost, user, password);
//if you are facing with SSl issue please try this
//con = DriverManager.getConnection("jdbc:mysql://192.168.23.100:3306/cardmaildb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false",user, password);


} catch (Exception e) {
System.err.println("error in connection");
e.printStackTrace();
}
System.out.println("E=======db Connecting======");
return con;
}


public static void main(String[] args) {
new DBConnection().getConnection();
}
}

在我的例子中,当我试图从同一个主机连接到运行在Ubuntu主机虚拟机容器中的mysql-server时,我遇到了这个错误。

< p >的例子: 如果我的虚拟机名称是abc.company.com,则下面的jdbc URL 不会起作用:

. c

jdbc:mysql://abc.company.com:3306/dbname

上面的jdbc url可以在其他机器上正常工作,如xyz.company.com,但不是abc.company.com

其中如下jdbc URL 效果很好abc.company.com机器上:

jdbc:mysql://localhost:3306/dbname

这让我检查了/etc/hosts文件。

/etc/hosts添加以下行可以修复此问题:

127.0.1.1 abc.company.com abc

这似乎是一个操作系统错误,需要我们在一些Ubuntu版本上添加这些。 参考:https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution < / p >

在尝试此之前,我已经尝试了所有其他解决方案,如GRANT ALL..,更改mysql.cnf中的bind-address行。在这件事上他们都没帮上忙。

在我的情况下,原来是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>


这个问题有很多答案,我认为我的答案更适合另一个问题,但那个问题的答案是锁定的。它指向这个线程。

为我解决这个问题的方法是将&createDatabaseIfNotExist=true附加到application.properties中的spring.datasource.url字符串。

这是非常棘手的,因为它表现为几个不同的、奇怪的、看似不相关的错误,当我试图修复它所抱怨的东西时,它只是弹出另一个错误,或者错误是不可能修复的。它抱怨无法加载JDBC,说它不在类路径中,但我以大约30种不同的方式将它添加到类路径中,并且已经是facedesking了。

我通过降级jdk版本解决了这个问题。 从11.0.11降级到11.0.10或更老的java版本

我在远程Jenkins服务器上运行自动化测试时遇到了这个问题。但是,在本地运行测试时,没有出现任何问题。

对我来说,这个问题是在将MySQL连接器版本更新到POM文件中的最新版本后解决的,因为MySQL版本在服务器端发生了更改。

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>

但是调试同样有点困难,花了差不多两天时间,因为我不知道MySQL版本的变化,它在本地工作得很好。

在我的案例中,解决方案是将预期的TLS协议添加到连接字符串中,如下所示:

jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2

此问题是“从xampp端口创建”。首先你应该确认你的端口号。基本上,每个人都尝试使用3306,但有时会出错。 您可以尝试jdbc:mysql://127.0.0.1:3307

请使用平台独立zip或tar,它为我工作时遇到这个错误。

https://dev.mysql.com/downloads/connector/j/?os=26

< p >添加 useSSL = false& allowPublicKeyRetrieval = true < / p >

jdbc: mysql: / / localhost: 3306 / cloudapp ? useSSL = false& allowPublicKeyRetrieval = true

< a href = " https://youtu。是/ ray3YvnIohM noreferrer“rel = > https://youtu.be/ray3YvnIohM < / >

通常,当您使用的数据库在操作系统中关闭时,会出现此问题。如果你使用windows,那么进入服务,确保MySQL是启动位置。

在MySQL Workbench中,有一种非常特殊的情况会发生这种问题,特别是在使用Eclipse JPA和本地主机下的持久性时。问题是,正如在其他一些回答中提到的,MySQL服务器在创建连接时可以非常严格地使用localhost, 0.0.0.0.1或127.0.0.1。为了克服这个问题,在(Windows)中的hosts文件:

C:\Windows\System32\drivers\etc

需要为主连接(例如myserver)添加以下条目:

#我的数据库服务器
127.0.0.1 myserver < / p >

如果没有添加到主机,那么每次尝试从127.0.0.1连接数据库时,连接都会失败

在我的情况下,我从intellij IDEA运行时得到这个错误,而从终端运行时使用./gradlew bootRun工作正常。然后我发现Intellij指向我下载的一些liberica java。我把它改成了OpenJdk one,它开始工作得很好。

对于我来说, 在连接字符串中添加查询参数解决了这个问题。 &useSSL=false < / p >

enter image description here

jdbc:mysql://${jdbc_url}:${jdbc_port}/${database_name}?serverTimezone=UTC&autoReconnect=true&useSSL=false&failOverReadOnly=false&maxReconnects=10


这也是MySQL正在消亡的原因。在我的例子中,我有一个查询触发了MySQL中的一个错误,所以每当执行查询时,服务器就会死机并重新启动。查看MySQL错误日志,看看是否发生了这种情况。 在我的情况下(MacOS上的Homebrew),它在/usr/local/var/mysql/<machinename>.err

因为我是在一个测试系统上看到的,所以我最终放弃并重新创建了我的数据库,这解决了问题,但我不敢想象如果它是在生产系统上,我会做什么。

在我的例子中,我遇到了这个问题。当我试图通过IntelliJ Idea数据源连接到AWS RDS MySQL时,CommunicationsException:通信链路故障)。

那个视频帮助了我: https://www.youtube.com/watch?v=v3jH1YxJqaY < / p >