- 浏览: 854410 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
一、解决方案一
最近在一个J2EE项目的开发过程中,遇到了这样的问题:
在服务器上部署好这个Web系统后,这时访问系统是很正常的。当把服务器的时间(例如:2008-03-31)加一天或更多天(例如:2008-04-01,2008-04-02...),这时再访问这个Web系统,报出如下的异常:
QUOTE: |
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFException MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. STACKTRACE: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1997) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3250) at com.mysql.jdbc.Connection.setAuto Commit(Connection.java:5395) ... |
我们首先判断是连接池出了问题,即当系统时间改变后,数据库连接发现超时,因此需要重新连接或完全重建连接池。我们换用了一下数据库,如果
使用Oracle数据库,同样的修改不会出现问题,系统运行正常,根据不会出现这样的异常。这就说明了出现这个异常是Mysql相关的,通过查阅资料得知
可能和Mysql的运行参数(超时)有关,顺着这个思路我们来分析Mysql的一些运行参数。
在MySQL Command Line Client中执行show variables like '%timeout%';如下图所示:
在图中我们可以看到有两个变量wait_timeout和interactive-timeout,它们的默认值都为28800秒,即为8小时。也就是说默认情况下,Mysql在经过8小时(28800秒)不使用后会自动关闭已打开的连接。
为
了解决这个问题,对于MySQL5之前的版本,如Mysql4.x,只需要修改连接池配置中的URL,添加一个参
数:autoReconnect=true,如果是MySQL5及以后的版本,则需要修改my.cnf(或者my.ini)文件,在[mysqld]后面
添加上:
wait_timeout = n
interactive-timeout = n
n为服务器关闭交互式连接前等待活动的秒数。
可是就部署而言每次修改my.ini比较麻烦,而且n等于多少才是合适的呢?所以这个解决办法不好。
怎
么才能比较好的解决这个问题呢?通过仔细分析,原因大致为:当修改系统日期后Mysql自动关闭已打开的连接,可以数据库连接池(DBCP)还认为这些连
接是活动的,如果这时有请求(需要执行读写数据库的操作),连接池就用一个连接去操作数据库,而这个连接在Mysql的连接池中并不存在,所以会出现以上
的异常。如果一个连接在和Mysql建立连接时能检查就不会有这样的问题了。
这时我们同事想起了他以前用过的一个数据库连接池
proxool,它有两个属性:一个是test-before-use,还有一个是test-after-use,这两个属性就是在使用前和使用后都要进
行对连接的检查,如果连接无效就扔掉再创建一个新的连接,它们的解释如下:
test-before-use:
If
you set this to true then each connection is tested (with whatever is
defined in house-keeping-test-sql) before being served. If a connection
fails then it is discarded and another one is picked. If all
connections fail a new one is built. If that one fails then you get an
SQLException saying so.
test-after-use:
If you set
this to true then each connection is tested (with whatever is defined
in house-keeping-test-sql) after it is closed (that is, returned to the
connection pool). If a connection fails then it is discarded.
于是我们在项目中换上proxool的连接池,再运行并访问系统,更改系统时间,再访问,一切OK,问题就这样解决了!
不但如此,proxool的连接池中的连接的数量,活动数以及每个连接的的具体情况都可以一目了然的看到,如下图所示:
通过上面的测试和分析,针对于Mysql5数据库,选择proxool数据库连接池是比较合适的。
c3p0的连接池有 idleConnectionTestPeriod 属性,可以设置一段时间后连接池自动测试执行,保持连接开放,效果也是一样的。
二、解决方案二
MySQL官方不推荐使用autoReconnect=true,参见http://bugs.mysql.com/bug.php?id=5020
需要另外找别的办法来解决超过8小时,链接断开的问题。
由于问题产生的根本原因在于服务到数据库的连接长时间没活动,既然重新连接的办法无效,就可以尝试另外一种办法,就是反空闲。
自己写一个线程来反空闲的话,比较麻烦。
最后在网上找到一个办法。为hibernate配置连接池,推荐用c3p0,然后配置c3p0的反空闲设置idle_test_period,只要小于MySQL的wait timeout即可。
在hibernate.cfg.xml中增加下面几项:
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">30</property>
<property name="c3p0.time_out">1800</property> <!-- seconds --><!-- default: 0 -->
<property name="c3p0.max_statement">50</property> <!-- default: 0 -->
<property name="c3p0.acquire_increment">1</property> <!-- default: 1 -->
<property name="c3p0.idle_test_period">120</property> <!-- seconds --><!-- default: 0 -->
<property name="c3p0.validate">true</property>
!@]{k?j
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat. 7,yVM
不用hibernate的话, connection url加参数: autoReconnect=true YHy&; -5
用hibernate的话, 加如下属性: a_Zbt
<property name="connection.autoReconnect">true</property> vm sFu(i
<property name="connection.autoReconnectForPools">true</property> P @:f+
<property name="connection.is-connection-validation-required">true</property> uY}.T�k
要是还用c3p0连接池: H <|^f!
<property name="hibernate.c3p0.acquire_increment">1</property> 'zcyrR"
<property name="hibernate.c3p0.idle_test_period">0</property> \F f%m
<property name="hibernate.c3p0.timeout">0</property> ug(QB
<property name="hibernate.c3p0.validate">true</property>
发表评论
-
mysql 安装注意
2010-07-12 21:07 834mysql 远程连接赋予权限: GRANT ALL PRIV ... -
Windows和Linux系统下面MySQL的大小写敏感性不同
2010-04-21 15:00 2031同样的建表脚本,在windows下所有的表名都成了小写的了,在 ... -
关闭Mysql日志功能
2009-08-04 17:47 1560Cacti服务器使用有一段时间了,发现在 /usr/loca ... -
ESQL编程使用说明
2009-07-30 20:51 1993ESQL编程使用说明 ... -
ESQL/C资料(完全版)四
2009-07-30 20:50 16425.3 嵌入SQL的处理过程 INFORMIX的预 ... -
ESQL/C资料(完全版)三
2009-07-30 20:47 2139第四节 ORACLE数据库的嵌 ... -
ESQL/C资料(完全版)二
2009-07-30 20:46 1917第三节 IBM DB2嵌入SQL语言 DB2支持SQL ... -
ESQL/C资料(完全版)一
2009-07-30 20:45 2487第六章 嵌入式SQL(E-SQL)简介 ... -
Mysql JDBC URL中几个重要参数说明
2009-07-28 08:57 2936mysql JDBC Driver 常用的有两个,一个是gj ... -
Linux平台下修正MySQL中文乱码问题
2009-07-20 16:49 1676操作系统环境: RHEL4.6 ... -
如何将syslogng的日志写入MySQL数据库
2009-07-20 11:24 3424如何将syslogng的日志写入MySQL数据库 <! ... -
shell自动连接mysql后进行查询操作的方法
2009-07-20 11:14 96031.需求,自动登录mysql(root:root,passwd ... -
用C语言操作MySQL数据库,进行连接、插入、修改、删除等操作
2009-07-20 11:07 2313很多人用到MySQL来开发一些项目,有时为了性能,我们会直接 ... -
mysql 5.X 迁移linux上,表名大小写敏感问题!
2009-07-18 17:39 2332mysql数据库,库名以目录名存在,表名以文件名(后缀为.fr ... -
mysql常用经典操作
2009-07-18 15:42 911.连接服务器 mysql -u cnscn ... -
绿色数据库
2009-07-17 23:20 1280如今,由于网络应用的飞速发展、多媒体数据的日益增长、视频音频 ... -
linux下mysql的最常用的操作指令_创建用户、备份和还原数据库
2009-07-17 08:55 26861]如何创建mysqld数据库的管理用户? 数据库安装好后, ... -
Linux操作系统下MySQL数据库的使用方法
2009-07-17 08:54 1012一、连接MYSQL: 格式: mysql -h主机 ... -
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的 区别
2009-07-15 11:42 1946org.gjt.mm.mysql.Driver是早期的驱动名称 ... -
安装 MySQL、MySQL GUI Tools
2009-07-14 14:57 2447文/李红军 http://hongjunli.blogjava ...
相关推荐
语言:English 防止意外断开连接的工具 一种无需单击按钮即可自动重新连接Google Colab的工具。
报错Connection to blog0@localhost failed....到此这篇关于IDEA链接MySQL报错08001和连接成功后不显示表的问题及解决方法的文章就介绍到这了,更多相关IDEA链接MySQL不显示表内容请搜索软件开发网以前的文章或继续
Reconnect3.java
此案例主要实现了客户端与服务端的基本会话的功能,客户端发送消息给服务端,服务端回传给单个或所有客户端。 修改服务端中的全局变量 g_bSendAll 可控制服务端...客户端中的宏定义 AUTO_RECONNECT可控制是否自动重连
mysql连接过多导致总是死掉,后来网上搜索发现此文自Mysql 5.x的某个版本之后,Mysql的自动关闭空闲连接的特性修改了,如果一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被...
自动重新连接自动重新连接 。 该脚本适用于非订户。 当您打开新的IRCCloud页面时,此脚本将重新连接到所需的断开连接的网络。 支持的浏览器:带有Firefox和带有Chrome
yarn add node-reconnect-ws用法const nodeReconnectWs = require ( 'node-reconnect-ws' )const wsc = new nodeReconnectWs ( { url : url , protocol : [ ] , reconnectInterval : 4000 , autoConnect : true , ...
MySQL和连接相关的timeout ...The number of seconds to wait for more data from the master before the slave considers the connection broken, aborts the read, and tries to reconnect. The fi
ActiveRecord::Mysql::UuidColumn 向ActiveRecord MySQL2适配器添加一个:uuid列,该列存储... mysql2 username: root host: localhost reconnect: true database: awesome_project_of_yours添加列类型uuid ActiveReco
用法 var reconnect = require ( 'net-socket-reconnect' )var client = reconnect ( { port : 8080 , reconnectInterval : 150 } ) // no change to original API选项reconnectOnError在“错误”时reconnectOnError...
SQL权限 SQLight是一个用C ++ 11编写的轻量级简单MySQL客户端。 SQLight返回JSON文档。 文档编写回调是可重写的。....reconnect()重新连接到数据库 .disconnect()与数据库断开连接 .is_connected()检查我们是否连
在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL server during query ERROR 2006 (HY000): MySQL server...
5、支持H264/H265+AAC组合Rtmp流,支持同步TS\MP4文件录制。 6、支持渲染时保证画面宽高比而自适应加黑边。 7、支持外层可设置的Jitter Buff延时,设置为0时为极速模式,配合低延时推送端最小延时仅500ms。 8、仅六...
pip install django_db_reconnect 注意仅支持pymysql,使django使用pymysql需要先安装包并在settings.py所在目录的__init__.py增加如下代码: import pymysql pymysql.install_as_MySQLdb() 使用 添加django_db_...
reconnect=true¤tschema=yuto #jdbc.driver=com.sap.db.jdbc.Driver #jdbc.url=jdbc:sap://port:30015?reconnect=true¤tschema=CUSTOMIZE #jdbc.username=**** #jdbc.password=***** #hibernate.dialect...
con1->reconnect = 1; mysql_select_db(con1, DBName) ; //mysql_query(con1, "useUnicode=true&characterEncoding=utf-8"); mysql_query(con1,"set names gbk"); if (!mysql_query(con1, "SELECT * FROM user...
reconnect Tcp断线重连实验