广告
返回顶部
首页 > 资讯 > 数据库 >解决JDBC连接Mysql长时间无动作连接失效的问题
  • 391
分享到

解决JDBC连接Mysql长时间无动作连接失效的问题

2024-04-02 19:04:59 391人浏览 八月长安
摘要

错误场景介绍 做的有一个项目使用JDBC手动创建Connection实现了一个简单的自定义数据库连接池,用来支持Canal解析数据库Binlog指定业务库的插入修改sql来进行数据库

错误场景介绍

做的有一个项目使用JDBC手动创建Connection实现了一个简单的自定义数据库连接池,用来支持Canal解析数据库Binlog指定业务库的插入修改sql来进行数据库分表备份(按照月份)操作.

但是发现当一个一段时间(较长)没有进行数据库操作时,连接都失效了,导致SQL执行失败失效提示为No operations allowed after connection closed

查明原因

经过搜索发现这个问题是由于Mysql默认一个已创建的长连接28800秒(八小时)内没有任何动作则会断开连接,该值对应参数为wait_timeout.当超时时间内有执行动作则会重新计时

查验

查询mysql超时连接时长命令show global variables like'wait_timeout'查看当前设置的超时断开连接时长.

将其改为10,本地服务运行功能发现重现了No operations allowed after connection closed错误,即确实是连接超时失效

解决方法

1. 修改Mysql配置

该方法不能根治这个问题,因为不能确认服务空闲时长而精确设置timeout并且还会造成多余连接长时间未断开而影响性能,所以不建议使用.建议在代码层面进行解决

通过set global wait_timeout=time(秒)来修改最长连接等待超时时间,但是这样设置当Mysql重启失效

可以通过修改my.ini文件永久改动超时时间,如下配置


interactive_timeout=28800000
wait_timeout=28800000

2. 连接丢弃重新创建连接

使用conn.isValid(int timeout)(秒)判断是否失效返回true表示连接有效,返回false表示连接失效.当失效时则重新获取一个数据库连接即可,之前的对象由于引用丢失会被回收掉.

3. 增加自动重连选项

在URL最后添加autoReconnect=true参数,jdbc:mysql://hostaddress:3306/xhb?autoReconnect=true.我这里对这个没有效果,可能是对框架连接池有用.

4. 定时执行一个动作进行超时时间刷新

比如默认时间是八小时,则每七小时对连接执行一次select 1语句来刷新该连接在数据库的超时等待时长

也可以1 2 4一起使用,来防止突然一个流量静默期间后突发流量高峰而导致获取连接不及时

补充:连接总是被mysql回收_一般连接池是怎么处理mysql自动回收长时间

若干套 MySQL 环境,只有一套:

行为异常,e5a48de588b63231313335323631343130323136353331333436316239怀疑触发 bug

性能异常,比其他环境都要低

在这种场景下,我们一般的做法是首先控制变量,查看软硬件配置,以及 MySQL 的参数配置。关于 MySQL 的参数配置对比,如果我们人工对比的话只会关注某些重点参数,而缺少了整体细节上的的对比。在这里我们推荐给大家 Percona Toolkit 中的一个工具 pt-config-diff

更准确的复制延时 pt-heartbeat在 MySQL 中,复制延迟可以理解为由两部分组成:1. 主库已经生成了 BINLOG,但是还没有发送给从库 -- 我们在这里称之为:日志延迟2. 从库已经接收到了 BINLOG,但是还没有应用完成 -- 我们在这里称之为:应用延迟MySQL 原生的查看复制延迟的手段为:show slave status\G中的Seconds_Behind_Master。这种观测手法只能观测出应用延迟。在异步复制或降级的半同步复制下,误差较大,无法准确的反映出整体复制延时。

1. 在 Master 上循环插入:insert into database.heartbeat (master_now) values(NOW())

2. database.heartbeat 的变更会跟随主从复制流向从库

3. 系统当前时间 - 从库表中的时间 = 从库实际的复制延时

更简单的参数配置建议 pt-variable-advisortoolkit 中包含了一个简单的 MySQL 参数优化器,可以对参数配置做简单的优化建议。

更准确的复制延时 pt-heartbeat在 MySQL 中,复制延迟可以理解为由两部分组成:1. 主库已经生成了 BINLOG,但是还没有发送给从库 -- 我们在这里称之为:日志延迟2. 从库已经接收到了 BINLOG,但是还没有应用完成 -- 我们在这里称之为:应用延迟MySQL 原生的查看复制延迟的手段为:show slave status\G中的Seconds_Behind_Master。这种观测手法只能观测出应用延迟。在异步复制或降级的半同步复制下,误差较大,无法准确的反映出整体复制延时。

更易用的调试工具 pt-pmp在某些情况下,我们肯定会遇到某些故障无法从日志,以及状态命令中找到原因,需要深入到程序逻辑级别。又或者我们需要立即通过非常规手段恢复故障数据库,但是又想保留足够多的故障信息。来避免我们事后复现问题的头疼。pt-pmp 便是在这种场景下帮助我们的工具。它会使用 gdb 来打印 mysqld 的堆栈信息,并把调用链相同的线程堆栈合并。堆栈合并的功能对于 MySQL 这种多线程的应用非常有帮助,会节省我们大量的时间。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: 解决JDBC连接Mysql长时间无动作连接失效的问题

本文链接: https://www.lsjlt.com/news/122290.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解决JDBC连接Mysql长时间无动作连接失效的问题
    错误场景介绍 做的有一个项目使用JDBC手动创建Connection实现了一个简单的自定义数据库连接池,用来支持Canal解析数据库Binlog指定业务库的插入修改SQL来进行数据库...
    99+
    2022-11-11
  • JDBC连接Mysql长时间无动作连接失效怎么办
    小编给大家分享一下JDBC连接Mysql长时间无动作连接失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!错误场景介绍做的有一个项目使用JDBC手动创建Co...
    99+
    2023-06-14
  • jdbc连接失效问题如何解决
    要解决JDBC连接失效问题,可以尝试以下几个方法: 检查数据库服务器是否正常运行:确保数据库服务器正常运行并且可以接收连接。可以...
    99+
    2023-10-24
    jdbc
  • Navicat连接MySQL时出现的连接失败问题及解决
    目录一、安装mysql的注意事项二、Navicat连接mysql方法一方法二总结一、安装MySQL的注意事项 官网下载安装,选择zip包,解压后不用安装只用配置好环境变量Path并在解压后的文件夹里新建文本文档my.in...
    99+
    2023-05-12
    Navicat连接MySQL Navicat连接MySQL连接失败 Navicat连接MySQL失败
  • Mysql连接无效(invalidconnection)问题及解决
    目录Mysql连接无效invalid connection解决的方案Mysql远程连接不生效总结Mysql连接无效invalid connection 一般连接数据库的代码库都有实现...
    99+
    2023-02-16
    Mysql连接无效 Mysql invalid connection Mysql连接
  • Mysql连接无效(invalid connection)问题及解决
    目录mysql连接无效invalid connection解决的方案Mysql远程连接不生效总结Mysql连接无效invalid connection 一般连接数据库的代码库都有实现连接池,如golang语言databa...
    99+
    2023-02-16
    Mysql连接无效 Mysqlinvalidconnection Mysql连接
  • 解决mysql连接超时和mysql连接错误的问题
    目录mysql连接超时和mysql连接错误连接MySQL错误create connection SQLException, url: jdbc:mysql://localhost:3306/*****解决方法mysql连...
    99+
    2022-07-11
    mysql连接超时 mysql连接错误
  • 解决Navicat for Mysql连接报错1251的问题(连接失败)
    因为之前写的不太详细这次修改补充一下,但是我的mysql之前的版本是8.0现在的版本是5.7所以截图有些怪,不过步骤一模一样,2个版本我都试过。 第一步:打开Command Line...
    99+
    2022-11-12
  • 解决Qt6连接MySQL的驱动问题
    目录 1. 引出问题2. 分析问题3. 解决问题3.1 获取编译所需材料3.1.1准备生成Mysql驱动文件的工程3.1.2 准备Mysql相关的头、库文件 3.2 开始进行编译3.3 复制文件(重要)3.4 测试连接 4...
    99+
    2023-08-19
    mysql 数据库 qt c++
  • 如何解决navicat连接mysql失败的问题
    这篇文章给大家分享的是有关如何解决navicat连接mysql失败的问题的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。Navicat连接mysql数据库时,不断报1405错误,下...
    99+
    2022-10-18
  • 如何解决phpMyAdmin无法连接MySQL的问题
    这篇文章主要介绍如何解决phpMyAdmin无法连接MySQL的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!phpMyAdmin无法连接MySQL怎么办解决方案:1、首先我们进...
    99+
    2022-10-18
  • 问题解决1:创建软连接后启动mysql失败
    linux中mysql介绍 linux版本: 查找系统上正在运行的 Linux 发行版和版本 方法一、使用Linux的etc目录中的os-release文件 可以通过运行以下命令来检查 Linux 操...
    99+
    2023-09-02
    mysql linux
  • 解决线上Oracle连接耗时过长的问题现象
    问题现象 1、远程Oracle数据库通过IP:PORT/SERVICE_NAME连接 2、应用服务通过Docker容器部署,访问Oracle联通性测试接口,需要50s左右才能返回连接...
    99+
    2022-11-12
  • 如何解决无法远程连接mysql的问题
    这篇文章给大家分享的是有关如何解决无法远程连接mysql的问题的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。无法远程连接mysql的解决方法:1、登录mysql;2、执行【gra...
    99+
    2022-10-18
  • 解决无法远程连接MySQL服务的问题
    ① 设置MySQL中root用户的权限: [root@nginx-dev etc]# mysql -uroot -pRoot@123mysql> use mysql;mysql> GRANT ALL PRIVILEGES ON *.* TO...
    99+
    2023-08-30
    服务器 mysql android
  • 如何解决远程连接mysql失败了的问题
    如何解决远程连接mysql失败了的问题?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!远程连接mysql失败了的解决方法:1...
    99+
    2022-10-18
  • ADO.NET连接MySQL时碰到的问题及解决方法
    这篇文章主要介绍“ADO.NET连接MySQL时碰到的问题及解决方法”,在日常操作中,相信很多人在ADO.NET连接MySQL时碰到的问题及解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET...
    99+
    2023-06-17
  • 如何解决navicat连接mysql时报错1251的问题
    这篇文章主要介绍了如何解决navicat连接mysql时报错1251的问题,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。navicat连接mys...
    99+
    2022-10-18
  • 怎么解决mysql MGR无法连接主节点的问题
    这篇文章主要讲解了“怎么解决mysql MGR无法连接主节点的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决mysql MGR无法连接主节点的问...
    99+
    2022-10-18
  • 如何解决mysql 8小时空闲后连接超时的问题
    这篇文章主要为大家展示了“如何解决mysql 8小时空闲后连接超时的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决mysql 8小时空闲后连接超时的...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作