开发者社区> 问答> 正文

报错 Communications link failure during rollback().

2023-02-22 12:58:11,002 ERROR 167616170 --- [Druid-ConnectionPool-Destroy-426868901] [com.alibaba.druid.util.JdbcUtils ] [com.alibaba.druid.util.JdbcUtils:75] : [0] close connection error com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.Util.getInstance(Util.java:408) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861) at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4561) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4187) at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1464) at com.alibaba.druid.util.JdbcUtils.close(JdbcUtils.java:73) at com.alibaba.druid.pool.DruidDataSource.shrink(DruidDataSource.java:2662) at com.alibaba.druid.pool.DruidDataSource$DestroyTask.run(DruidDataSource.java:2427) at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2414)

麻烦各位大神,帮忙确认下这个报错是什么原因,参数配置如下: username: xxxx password: xxxxx jdbc-url: jdbc:mysql://xxxx:3306/xxx?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true

配置初始化大小、最小、最大线程数

initialSize: 5 minIdle: 5

CPU核数+1,也可以大些但不要超过20,数据库加锁时连接过多性能下降

maxActive: 15

最大等待时间,内网:800,外网:1200(三次握手1s)

maxWait: 60000 validationQuery: SELECT 1 maxPoolPreparedStatementPerConnectionSize: 15

原提问者GitHub用户dongFeng179

展开
收起
山海行 2023-07-05 16:09:42 1912 0
5 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    "Communications link failure during rollback()" 这个错误通常表示在执行回滚操作时,JDBC 驱动程序无法与数据库建立连接或通信失败。

    以下是一些可能导致这个错误的常见原因和解决方法:

    数据库连接超时:如果数据库连接超时,JDBC 驱动程序将无法与数据库建立连接或通信失败。您可以检查数据库的连接配置,包括连接池大小、最大连接数、连接超时时间等,以确保连接设置正确。

    数据库故障或网络故障:如果数据库或网络出现故障,JDBC 驱动程序也可能无法与数据库建立连接或通信失败。您可以检查数据库和网络的状态,包括检查数据库是否正常运行、网络连接是否稳定等。

    数据库访问权限问题:如果您使用的数据库账号没有足够的权限访问数据库或执行回滚操作,JDBC 驱动程序也会报这个错误。您可以检查数据库账号的权限设置,包括授权对象、授权范围等。

    JDBC 驱动程序版本不兼容:如果您使用的 JDBC 驱动程序版本与数据库版本不兼容,也可能导致这个错误。您可以检查 JDBC 驱动程序的版本和数据库的版本,以确保它们兼容。

    2023-07-30 21:28:41
    赞同 展开评论 打赏
  • 网络连接问题:首先,您可以检查网络连接是否正常,确保可以从应用程序服务器成功连接到MySQL数据库服务器。您可以尝试使用命令行工具(如ping)或其他网络工具进行测试,以确定是否存在网络连接问题。

    数据库服务器故障:确保MySQL数据库服务器正常运行且可用。您可以尝试连接到数据库服务器并执行一些简单的查询来验证其状态。

    数据库配置错误:请确保您的数据库连接配置参数正确无误。在您提供的参数配置中,用户名、密码和JDBC URL 看起来是正确的。但是,您还可以检查以下内容:

    确保MySQL数据库服务器的主机名或IP地址、端口号等信息是正确的。
    确保数据库名称(如 /xxx)和其他连接参数(如 useUnicode、characterEncoding、autoReconnect 等)的设置是正确的。
    数据库连接池配置问题:如果您正在使用连接池(例如Druid),请确保连接池的配置正确无误。您可以检查连接池的最大连接数、连接超时时间等参数是否合理设置。

    MySQL驱动版本问题:尝试更新或回退您使用的MySQL驱动程序版本,以确保与MySQL数据库服务器版本兼容。

    2023-07-09 09:56:18
    赞同 展开评论 打赏
  • 事务等待时间超过了连接失效时间。 排查和修改timeout配置即可,包括客户端和mysql server段。

    原回答者GitHub用户kimmking

    2023-07-06 10:36:07
    赞同 展开评论 打赏
  • 根据错误日志,报错信息是com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.,这意味着在执行事务回滚时发生了通信链接失败的错误。

    这种错误通常有以下几个可能的原因:

    1. 网络连接问题:可能由于网络中断、网络不稳定或防火墙限制等原因导致与数据库服务器之间的通信中断。

    2. 数据库配置问题:可能由于数据库配置错误或连接池配置问题导致连接中断。特别是在使用连接池(如Druid)时,连接池的配置参数需要仔细检查,确保正确。

    3. 数据库故障:可能由于数据库服务器出现故障或异常状态导致连接中断。

    针对你提供的参数配置,可以尝试以下几步来排查问题:

    • 首先,确保网络连接正常,尝试通过其他方式连接到 MySQL 数据库并验证是否能够成功。
    • 检查数据库连接池(如 Druid)的配置参数是否正确,包括url、用户名、密码等。确认没有遗漏或错误的配置项。
    • 检查MySQL数据库服务器的状态,确保数据库服务正常运行,并且没有出现任何异常或故障。
    2023-07-05 17:40:24
    赞同 展开评论 打赏
  • 报错信息为 "Communications link failure during rollback(). Transaction resolution unknown.",这通常表示在事务回滚期间出现了通信链接失败的情况。

    这种错误通常是由于数据库连接断开或连接超时导致的。可能的原因和解决方法如下:

    1. 网络连接问题:请确保数据库服务器的网络连接正常,并且能够访问到数据库服务器的 IP 地址和端口。您可以尝试通过 ping 命令或 telnet 命令测试网络连接。

    2. 数据库连接超时:您可以尝试增加连接池的最大等待时间(maxWait)来避免连接超时。根据您的配置,将最大等待时间设置为较大的值,例如 120000(毫秒)。

    3. 数据库配置问题:请确保您的数据库配置正确无误,包括用户名、密码、数据库名称和连接URL。确保数据库服务器上的数据库实例正在运行,并且可以通过提供的连接URL进行访问。

    4. 数据库连接数限制:如果数据库服务器的最大连接数有限制,可能会导致连接池无法获取到足够的连接。您可以尝试调整连接池的最大活动连接数(maxActive)和最大预处理语句连接数(maxPoolPreparedStatementPerConnectionSize)来适应数据库服务器的连接数限制。

    2023-07-05 16:47:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载