MySQL 数据库在 8 小时后断开连接。如何预防?

Posted

技术标签:

【中文标题】MySQL 数据库在 8 小时后断开连接。如何预防?【英文标题】:MySQL database drops connection after 8 hours. How to prevent it? 【发布时间】:2018-05-06 02:09:05 【问题描述】:

我们有一个使用 Spring 和 Hibernate 用 Ja​​va 8 编写的应用程序。

我们在 prod 和 dev 环境中都使用 mysql 数据库。该数据库每天使用一次,一个过程从晚上 11 点开始。有些日子甚至没有人使用 prod 数据库,因此在 8 小时不活动后 MySQL 数据库正在断开连接。当进程开始时,我们得到一个错误:

Exception occured: org.hibernate.exception.GenericJDBCException: Cannot release connection 

然后,当有人在初始失败后手动启动该过程时 - 一切正常。

似乎第一次连接(自动)尝试以某种方式触发了 MySQL 数据库,而第二次(手动)尝试没有问题,因为 MySQL 数据库已启动并正在运行......

我们有 3 个想法:

    在我们应用的代码中,使用一个触发器,它会在进程开始前 10-15 分钟左右尝试连接到数据库(但它仍然会抛出这个异常,这不太好) 将 MySQL 上的 8 小时空闲计时器设置为 24 小时或更长时间 在spring-database.xml 中配置 JDBC 驱动程序,使其每 4 小时以某种方式“ping”一次数据库以使其保持活动状态,但我们仍然不知道如何正确执行...

哪一个(这三个)似乎是最好的?我们个人认为第三种解决方案是最好的……但是如何配置 JDBC 驱动程序以某种方式每 4 小时左右“ping”一次数据库?或者也许你们中的某个人会有另一个更好的主意?

在此先感谢

哪个主意最好?

【问题讨论】:

可能你需要的是配置连接池。检查数据源设置 错误是什么?是mysql连接超时类型吗? 见***.com/questions/30451470/…(它解释了Spring Boot,但基本上你必须这样做)。 可能重复***.com/questions/270800/… Why does Hibernate/JDBC/MySQL drop connections after a day or so?的可能重复 【参考方案1】:

您可以使用 jdbc url 中的 autoReconnect 参数来解决此问题。例如:

MYSQL_URL=jdbc:mysql://10.*.*.0:3306/ABC?autoReconnect=true

【讨论】:

【参考方案2】:

解决方案 2 是解决此问题的最少工作量,并且可能是最常用的方法。

Log in to your server using SSH.

Edit my.cnf (the MySQL configuration file).

sudo vi /etc/my.cnf

找到超时配置并调整它以适合您的服务器。

设置wait_timeout = 86400 = 24 小时。

【讨论】:

以上是关于MySQL 数据库在 8 小时后断开连接。如何预防?的主要内容,如果未能解决你的问题,请参考以下文章

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

mysql闲置8小时后,自动关闭连接,再对数据库进行操作就会出问题,如何解决

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

MySql连接空闲8小时自动断开的原因及连接池配置方法

MySql连接空闲8小时自动断开引起的问题

mysql 8小时问题