kettle作业连接mysql资源库8小时后报错

kettle作业连接mysql资源库8小时后报错,第1张

kettle作业在运行一段时间后会报错,原因是mysql会默认每8小时回收一次无用连接。

错误日志如下:

然后你的作业就失败了,必须重新启动kettle才能解决。

经过多次排查,最终解决。

加上 autoReconnect=true 参数

虽然能解决8小时mysql自动丢弃无用连接的问题,但是不能解决mysql宕机后的自动重连。

修改方式,自行百度

例如wait_timeout是8小时,只需把调度周期设为<8小时即可

在kettle5.4测试不通过,在kettle7测试通过。

配置数据源连接时,采用连接池,配置如下

关于连接池参数,kettle使用的是apache dbcp connetions pool.

修改方式,自行百度

最近做的一个JavaWeb项目,持久层用SpringJDBC+DBCP+MySQL。一开始只配置了DBCP的一些常用参数,没有注意对空闲连接的检查和回收。项目部署在tomcat后,刚开始使用没用问题。第二天再试图登录时,发生了报错:

可以看到,报错信息提示上次交互已经是82664635ms前,超过了MySQL server配置的'wait_timeout'(默认是8小时),所以该连接已经被MySQL回收了,但DBCP不知道连接已被回收,依然试图执行 *** 作,引发了异常。报错信息提示可以修改wait_timeout或者添加autoReconnect=true。

(备注:mysql5以上的,设置autoReconnect=true 是无效的 只有4.x版本,起作用)

这两个参数的默认值是8小时(60 60 8=28800)。 注意:wait_timeout的最大值只允许2147483 (24天左右)

也可以用MySQL命令进行修改

这种办法治标不治本。

2.减少连接池内连接的生存周期,使之小于上一项中所设置的wait_timeout 的值。

也就是说,让已经断开的空闲连接没有机会被使用,提前被回收。

以C3P0配置为例:

DBCP中配置minEvictableIdleTimeMillis即可。

3.配置连接池

定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。并且每次使用连接前检查连接是否可用,定期回收空闲的连接。

修改 c3p0 的配置文件,在 Spring 的配置文件中设置:

DBCP连接池的配置:

DBCP官方配置文档: http://commons.apache.org/proper/commons-dbcp/configuration.html

C3P0的配置标准:

关于MySQL的wait_timeout连接超时问题报错解决方案

应用程序注册了JDBC驱动,但当程序停止时无法注销这个驱动,tomcat为了防止内存溢出,就给强制注销了。

当应用程序和数据库建立连接时,如果超过了8个小时,应用程序句不会去访问数据库,数据库就会出现断掉连接的现象 。这时再次访问就会抛出异常。

一般的解决方法大多是在数据库连接字符串中增加“autoReconnect=true ”选项。但是这只对mysql4以前的版本有效。

在最新的mysql中是无效的。其实要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。

可以在" my.ini"文件中增加此参数:

[mysqld]

interactive_timeout=288000

wait_timeout=288000


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10003226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存