这期内容当中小编将会给大家带来有关MYSQL 以及JAVA 连接错误的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
最近开发告诉我,他们在测试系统的时候,会经常有连接MYSQL的连接被踢掉。具体给我的解释是,JAVA的缓冲池连接MYSQL 保持连接,但再次使用的时候,报连接错误。
对应应用程序的报错的时间点,查了一下 PROXYSQL 和 MYSQL 的错误日志,的确是有相关的错误。
PROXYSQL 错误日志
MYSQL 的错误日志
那么问题来了,到底为什么会 got timeout reading communication packets。
DBER可以冠冕堂皇的告知,这是JAVA 的问题,不是数据库的问题,但是如果作为 Architector of Databases,这样的回答的确是遭恨。
所以必须搞清楚到底是怎么回事,故事就开始了。首先JAVA 程序是有缓冲池来连接到 MYSQL 的 ProxySQL 的,而ProxySQL 作为MYSQL 的中间件和缓冲,会将JAVA的连接转接到 MYSQL (MGR MTS)的主节点。
分析问题的一步步来,我们先从MYSQL 这个根上来
从MYSQL 的角度来说,产生 Aborted_clients 和 Aborted_connects 有三个原因。
1 客户端的连接,在MYSQL中被意外的终止了,至于这个意外是什么,有可能是当前的连接被DBA 使用KILL 终止了,或者其他的PT-KILL工具之类的方式,让你的连接停掉了。
2 MYSQL 中的两个参数, wait_timeout 和 interactive_timeout ,wait_timeout 是如果连接处于 idle的状态多长时间,这个连接就会被踢掉。wait_timeout 和 interactive_timeout
wait_timeout 是你的连接的idle(空闲的时间),超过多少时间就被系统KILL 掉
interactive_timeout 是在程序和数据库交互中,的间隔时间,如果你间隔时间较长,让数据库等的不耐烦了,就给你清理掉你的连接的线程。
程序员可能会问,WHY, 这主要是每个连接都会HOLD住一定的内存,例如 sort buffer join buffer 之类的,如果这些BUFFER 初始的时候就给的挺大,那后面如果连接太多,系统就可能OOM, 所以系统必须管管那些不负责的连接,光知道开,不知道关。
那如何来确认你现在的MYSQL 的连接数,这里设置都是 1800秒,也就是30分钟。
说完这里,继续说PROXYSQL, 作为目前最好的开源的MYSQL 的中间件,用的人不少。
其实proxysql 也是有线程池的,我目前的PROXYSQL 就有一个主34个子线程组成。
而proxysql 中的连接池也是保存空闲连接的,而多长时间PROXYSQL 会进行一个ping 保持与MYSQL之间的连接,的时间是通过 mysql-ping_interval_server_msec 来进行。
而mysql-connection_max_age_ms 是当空连接在没有任何会话使用的情况下,空闲的时间超过了 mysql-connection_max_age_ms
的设置后PROXYSQL 会自动关闭这个连接。
mysql-ping_timeout_server
则是PROXYSQL 为了维持和后端的空闲连接,每隔一段时间来发送PING 一次得到回复超时的时间
写到这里,估计能送网上BAIDU到很多,关于这样的问题,而解决这样问题的方法,大部分是修改MYSQL的 两个timeout 的时间,默认为28800秒也就是 8个小时,他们建议将时间改为 31536000 秒,好吧我不打人,这样的程序员每月能赚2000块在北京都是多给。
最后我这个非JAVA Developer GOOGLE 出的解决方案是
在配置Druid DatasourceStat
1 需要配置
validationQuery: select 1 (这样的语句去访问数据库避免引起性能的消耗)
testWhileIdle: true
timeBetweenEvictionRunsMillis: 的设置一定要小于 mysql 或者 proxysql 的 timeout 值
我这里 timeBetweenEvictionRunMills 的值应该是小于 3分钟。
到此 解决Communications link failure 的问题,告知段落,到目前为止还没有新的错误告诉我,阿弥陀佛。
上述就是小编为大家分享的MYSQL 以及JAVA 连接错误的示例分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。