MySQL 数据库在 8 小时后断开连接。如何预防?
Posted
技术标签:
【中文标题】MySQL 数据库在 8 小时后断开连接。如何预防?【英文标题】:MySQL database drops connection after 8 hours. How to prevent it? 【发布时间】:2018-05-06 02:09:05 【问题描述】:我们有一个使用 Spring 和 Hibernate 用 Java 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小时后,自动关闭连接,再对数据库进行操作就会出问题,如何解决