不是重复的,所有建议的修复都不能解决我的问题。
添加请求的信息以重新发布问题:
OS:Amazon Linux AMI版本2018.03
Java:1.8-更具体的说,它是OpenJDK build 1.8.0_201-b09
Spring Boot:2.1.2。发布
数据库:AWS RDS MariaDB 5.7.16版
以下是包含MySQL错误日志的要点的链接: https://gist.github.com/urielb/6675ec2a80f5fbca630e52ca0b9d2b2a
在MySQL日志中,我上面提到的崩溃部分之前出现的很多东西是:
2019-07-11T19:26:18.888986Z 791 [Note] Aborted connection 791 to db: 'database' user: 'user' host: 'IP_ADDRESS' (Got an error reading communication packets)
但是除此之外,我在服务器日志中找不到任何内容。
编辑结束#2
在过去的几天里,这让我挠头。
我们有一个Java Spring Boot应用程序,可以访问MySQL数据库。
我们有一个动作,应该在服务器上保存一些数据,有时它可以正常工作,但有时它会失败,但是我仍然无法找到发生这种情况的模式。仅在生产中发生。
除单击按钮外,没有其他用户输入,但是当我们尝试建立与数据库的连接以执行所需的操作时,则连接简单。
public static Connection getConnection()
{
try
{
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(Conf.getDatabaseConnectionString(), Conf.getDatabaseConnectionUser(), Conf.getDatabaseConnectionPassword());
return conn;
} catch (SQLException e)
{
logger.error("Failed to establish a connection to the database (SQLException): " + e.getMessage());
return null;
}
...
}
除了指向生产服务器之外,连接字符串与以下相同。
jdbc:mysql://localhost:3306/database?useSSL=false&allowPublicKeyRetrieval=false
基本上是函数,除了有更多的捕获检查是否无法建立连接,为什么这样做并返回空值。
因此,问题是,此方法通常返回null。起初我以为可能是“ TOO MANY ConnectionS”问题,但经过进一步检查,我意识到事实并非如此。显然它失败并显示
...CJCommunicationsException: 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.
但是我真的不知道是什么原因造成的,为什么这个问题是间歇性的?我不知道从哪里开始解决这个问题。我已经实现了一个Hikari连接池,希望这只是连接过多的情况。
我已经阅读了一些文章,建议在MySQL服务器上进行一些配置,特别是关于列表地址和端口,但是使用AWS RDS,我们要做的就是配置安全组,这也无法解决安全性问题。问题...
有人经历过类似的经历吗?我现在愿意接受任何想法或建议。