Mysql偶尔连接失败的问题

在项目中,偶尔会出现获取jdbc连接失败的报错
其中有一种因为连接失效的报错:

The last packet successfully received from the server was 1,312,227 milliseconds ago. The last packet sent successfully to the server was 1,312,266 milliseconds ago.

说明我们的程序首次获取数据的Connection资源,从而进行正常的DB读写操作。但是在下次进行DB读写时,应用程序还以为之前的连接可用,(之前的连接没有被释放掉),但实际上,这个连接在Mysql数据库那边已经过期了,(把这个连接标记为timeout了)。于是,就出现了上述报错

Mysql数据的对应参数为
可以通过命令查看:

show variables like '%timeout%'

查询结果:
在这里插入图片描述
参数的配置文件在:在/etc/my.cnf
可以根据自己实际需求设置

解决方案:

1.如果使用的是JDBC,在JDBC URL上添加?autoReconnect=true,如:

jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true

2.如果是在Spring中使用DBCP连接池,在定义datasource增加属性validationQuery和testOnBorrow,如:

<property name= "validationQuery" value= "SELECT 1" />
<property name= "testOnBorrow" value= "true"/>

3.如果是在Spring中使用c3p0连接池,则在定义datasource的时候,添加属性testConnectionOnCheckin和testConnectionOnCheckout,如:

<property name= "testConnectionOnCheckin" value= "false"/>
<property name= "testConnectionOnCheckout" value= "true"/>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你尝试使用MySQL连接器(如JDBC或MyBatis)建立到MySQL数据库的新连接时,如果失败,可能是由于以下几个原因: 1. **数据库地址错误**:确认MySQL服务器的主机名、IP地址以及端口号是否正确。默认情况下,MySQL监听的是3306端口。 2. **用户名和密码不正确**:确保你在连接字符串中使用的用户名和密码与数据库中的账户匹配。 3. **防火墙设置**:检查是否有防火墙阻止了你的应用程序连接到数据库。可能需要添加数据库的IP或端口作为白名单。 4. **MySQL服务未运行**:确认MySQL服务是否正在运行。在Linux或Mac上,可以尝试`sudo service mysql status`,在Windows上可能是`mysql -u root -p`。 5. **连接问题**:如果你使用的是连接池(如Spring的JdbcTemplate或Hibernate),检查配置文件中是否正确地配置了连接池参数。 6. **网络问题**:如果数据库和应用不在同一台机器上,可能因为网络问题导致连接失败。 7. **SSL/TLS问题**:如果数据库配置为使用SSL,连接时可能需要提供正确的证书和私钥。 8. **数据库权限**:连接的账户可能没有足够的权限进行操作,尤其是对特定的数据库或表。 9. **驱动程序问题**:检查使用的MySQL驱动程序是否正确安装且版本兼容。 10. **连接超时**:如果网络延迟很大,连接可能会超时。你可以在连接字符串中增加`timeout`参数。 要解决这个问题,你可以尝试逐一排查上述原因,或者获取具体的错误信息(通常是SQLException的堆栈跟踪),这会更具体地指示问题所在。如果你能提供错误信息,我可以帮助你更准确地定位问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值