一个关于MySQL的8小时问题在项目中的出现。
最近在项目测试过程中出现了数据库连接被close的问题。
现象:
早上一来测试前几条的订单时,就会报连接close,之后一天都是正常的。
初探:
用了C3P0,很自然的就想到了C3P0为什么会把close的连接给项目使用,因为C3P0本身会有检查连接是否有效的机制。自然就想到是不是配置有问题,结果配置了所有的选项,在本地测试都有问题。
本地测试测场景:
1,MySQL的8小时连接无效改成2分钟。
2,C3P0把与检查连接相关的配置全部配置上。
结果让人失望的是,全部不行。
进一步:是不是触发了C3P0的BUG,换阿里的连接池?,不过这个想法只是一闪而过。
最后:没有办法,回过头来一句一句的研读代码,分析业务,最后发现一句和数据库没有关系的代码上发现了问题。
原因:在一个线程中,获取了C3P0的一个连接。在业务代码中向缓存队列取数据时,如果队列中没有数据,该线程阻塞了!这样在队列中长期没有数据的情况下(测试环境下同事在下班后没有进行订单提交),这个数据点就超过了MySQL的8小时设置,超过8小时,MySQL检查机制检查到该连接没有任何数据交互。就会把该连接close。这个是MySQL的行为不会通知连接池。而在我们的系统中因为该连接是一直被线程占用,所以C3P0不会去检查它是否有效(因为C3P0认为你一直在使用该连接)。这样C3P0认为可以用,MySQL其实已经close。当早上来测试同事向队列发送数据的时候,线程解除阻塞,后面再使用持有的连接来操作数据库的时候,这个时候就会报close的错误了。
总结:1,不要轻易怀疑你使用的开源工具,因为遇到的问题99.99%都是自己代码的问题。
2,万不得已不要使线程阻塞,即使使用了阻塞的方法,也一定要加上超时时间。
分享到:
相关推荐
标题 "Mybatis破MySql8小时断线问题1" 指的是在使用Mybatis框架与MySQL数据库交互时遇到的一个常见问题,即由于MySQL数据库的连接超时机制导致的8小时断线。描述中提到,当数据库连接闲置时间超过MySQL默认设定的8...
总结来说,解决MySQL8小时空闲后连接超时问题的方法包括修改MySQL的启动参数或配置文件,以及优化应用程序的数据库连接管理,如使用连接池。同时,关注数据库性能优化,如使用合适的查询语句和数据类型,可以提升...
在解决MySQL8小时断开连接的问题时,我们需要进行以下步骤: 1. 添加Proxool和MySQL驱动到项目类路径:从提供的压缩包中,可以看到`proxool-0.8.3.jar`和`mysql-connector-java-5.1.6-bin.jar`,这两个jar包分别是...
修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,红色部分 mysql> show variables like ‘%timeout%’; +————————...
mysql默认8小时闲置就会断开,会导致下次操作数据库报异常,c3p0可以完美解决!
MySQL中的“8小时问题”是一个常见的数据库连接管理问题,尤其在使用连接池如c3p0的情况下。这个问题的根源在于MySQL服务器的默认配置与连接池的管理策略之间的不协调。MySQL在空闲连接达到一定时间(默认8小时,即`...
它的文件通过8.0.14 MySQL 8。它可以包括MySQL版本尚未发布功能的文档。关于哪个版本的信息已被释放,看到MySQL 8版本说明 MySQL集群是目前不在MySQL 8的支持。关于MySQL集群的信息,请参阅7.5、MySQL NDB ...
MySQL8:MySQL参考手册。它的文件通过8.0.14 MySQL 8。它可以包括MySQL版本尚未发布功能的文档。关于哪个版本的信息已被释放,看到MySQL 8版本说明 MySQL集群是目前不在MySQL 8的支持。关于MySQL集群的信息,请参阅...
MySQL 8中文参考手册.pdf MySQL 8是关系数据库管理系统的最新版本,它提供了强大且灵活的数据存储和管理功能。本手册详细介绍了MySQL 8的安装、配置、管理和优化等方面的知识点。 安装和配置 MySQL 8提供了多种...
标题中的“mysql8、mysql5两个版本驱动”指的是用于连接MySQL数据库的Java驱动程序,即`mysql-connector-java`。这个驱动程序允许Java应用程序通过JDBC(Java Database Connectivity)接口与MySQL服务器通信。在给定...
《DataX MySQL8读写插件详解》 DataX是阿里巴巴开源的一款强大的数据同步工具,它支持多种数据源之间的数据迁移。在大数据处理领域,MySQL作为广泛应用的关系型数据库,其数据的读取与写入往往是必不可少的操作。...
它的文件通过8.0.14 MySQL 8。它可以包括MySQL版本尚未发布功能的文档。关于哪个版本的信息已被释放,看到MySQL 8版本说明 MySQL集群是目前不在MySQL 8的支持。关于MySQL集群的信息,请参阅7.5、MySQL NDB Cluster ...
本篇文章将详细讨论MySQL8与MySQL5在连接驱动jar包方面的差异,以及如何使用这些驱动来连接Java应用程序。 首先,让我们关注两个不同版本的驱动包:“mysql-connector-java-5.1.30.jar”和“mysql-connector-java-...
MySQL 8 Cookbook: Over 150 recipes for high-performance database querying and administration Design and administer enterprise-grade MySQL 8 solutions Key Features Store, retrieve, and manipulate your...
在Java应用中连接MySQL数据库,通常需要MySQL的JDBC(Java Database Connectivity)驱动,也就是我们所说的“mysql8的驱动jar包”。这个jar包提供了Java应用程序和MySQL数据库之间的通信桥梁,使得数据的读取、写入...
5. `mysql8install.sh`:这是一个脚本文件,可能包含了安装和配置MySQL的自动化步骤。 离线安装的步骤如下: 1. **准备环境**:确保你的CentOS 7系统已经更新至最新,并且安装了`yum-utils`工具,它包含了`presto`...
mysql8 docker 镜像 下载后直接导入docker load -i mysql.tar
mysql8一键化安装脚本 1 可以自由安装在任何目录下(直接回车默认安装在/auto),而且所有的东西都在此目录下,不会出现在其他目录中 2 内置可以在存储过程中执行Linux命令插件 3 安装完成后,cd /auto/mysql/support-...
mysql8中文api,主要内容。安装和升级数据库,mysql安全,备份和恢复,字符集排序规则 ,sql语句语法。INnoDb存储引擎、 mysql数据字典、替代存储引擎,分布。mysql性能模式。连接器和api,sql模式指标 状态变量指标...
"mybatis连接MySQL8出现的问题解决方法" MyBatis是当前最流行的持久层框架之一,它提供了一个简单的方式来访问数据库。然而,在使用MyBatis连接MySQL8时,可能会出现一些问题。本文将介绍MyBatis连接MySQL8出现的...