登录WEB时提示Mysql数据库无法连接!

    背景:某WEB工程,使用Mysql5.4作为数据库,Tomcat6作为WEB容器(我真不知道为什么要用6,是我我就用7.052....),利用Java某框架(对这方面不熟,分不清Spring和Hibernate)来维护连接池,使用jdbc。
    现象:登录WEB的时候报错,大致如下
            com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 73,617,252 milliseconds ago.  The last packet sent successfully to the server was 73,617,252 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
            只要重启Tomcat就解决问题。
    碎碎念:红色部分已经标示出了解决方案,然后高高兴兴的找boss去说,让改一下数据库的超时时间,得到的返回是不改。。。。原因自始至终都没告诉我。。。。╮(╯_╰)╭。。。好吧,自己想办法。。。。
    正经的:提示信息里面给出的两种解决办法,
                第一种:修改wait_timeout的数值,单位是秒。在某些情况下,这样子修改是可行的,比如Mysql作为事务处理的数据库,逗比程序员在业务代码上没有检查连接的有效性or某些java框架配置的连接池的参数不对导致连接池的连接已经过期,然后你又不想去检查这些东西,直接改wait_timeout,万事大吉。
                第二种:在jdbc的url里面添加autoReconnect=true。从字面意思上看,自动重连,从实际上来看,在url里面添加这一项以后,没有任何改观,在默认设置的8小时之后,依然会出现如上错误。
                第三种:仅作临时解决方案,写个shell脚本每隔六个小时重启一下Tomcat......╮(╯▽╰)╭........(记得用 & 在后台跑...)
                

点击(此处)折叠或打开

  1. prefix=/usr/TomcatSvr7/bin
  2. tomcat_name=TomcatSvr7
  3. while :
  4. do
  5. pid=`ps -ef | grep TomcatSvr7/ |grep -v \'grep\' | awk \'{print $2}\'`
  6. test \"$pid\" != \"\" && sudo kill $pid && echo \"Stop TomcatSvr7 Successful!\" || echo \"Stop TomcatSvr7 Failed!\"
  7. $prefix\\/startup.sh
  8. sleep 21600
  9. done

    严肃的开始向度娘求助:
       关于url后面的几个常用参数的意义

参数名称 参数说明 缺省值 最低版本要求
user 数据库用户名(用于连接数据库)   所有版本
password 用户密码(用于连接数据库)   所有版本
useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true false 1.1g
characterEncoding 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false 1.1g
autoReconnect 当数据库连接异常中断时,是否自动重新连接? false 1.1
autoReconnectForPools 是否使用针对数据库连接池的重连策略 false 3.1.3
failOverReadOnly 自动重连成功后,连接是否设置为只读? true 3.0.12
maxReconnects autoReconnect设置为true时,重试连接的次数 3 1.1
initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2 1.1
connectTimeout 和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 0 3.0.1
socketTimeout socket操作(读写)超时,单位:毫秒。 0表示永不超时 0 3.0.1

    从这份说明文档里面可以看到,用某框架配置的连接池,如果要重连应该使用autoReconnectForPools更为恰当,当然,也没找到为什么autoReconnect对连接池不行.....
    如果使用连接池建议设置为autoReconnect=true&failOverReadOnly=false
   实际上,Java的框架除了用jdbc维护连接池以外,也可以使用c3p0,对应的jar包有两个,一个是c3p0,还有一个是mchange,可以在www.java2s.com下载到,在左边的首字母里面进行搜索。

c3p0的配置说明

 
 
 3
 
 
 30
 
 
 1000
 
 
 false
 
 
 Test

 

 
 false

 

 
 100

 

 
 

 

 
 null

 

 
 false

 

 
 60

 

 
 3
 
 
 60
 
 
 15
 
 
 100
 
 
 

 

 
 3

 

 
 root
 
 
 password

 

 
 

 

 
 select id from test where id=1

 

 
 300
 
 
 false
 
 
 true

 

 
 root

 

 
 false

  某Java框架的参考配置
   
  
  
  
  
  
  
  
  
  

 

 

     
                     
       

时间: 2024-10-28 02:28:14

登录WEB时提示Mysql数据库无法连接!的相关文章

MySQL数据库远程连接开启方法_Mysql

第一中方法:比较详细以下的文章主要介绍的是MySQL 数据库开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是MySQL 数据库开启远程连接的时机操作流程. 1.d:\MySQL\bin\>MySQL -h localhost -u root 这样应该可以进入MySQL服务器 复制代码 代码如下: MySQL>update user set host = '%' where user = 'root'; MySQL&g

MySQL数据库远程连接开启方法

第一中方法:比较详细 以下的文章主要介绍的是MySQL 数据库开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是MySQL 数据库开启远程连接的时机操作流程. 1.d:\MySQL\bin\>MySQL -h localhost -u root 这样应该可以进入MySQL服务器 复制代码代码如下: MySQL>update user set host = '%' where user = 'root'; MySQL&g

导入Web日志到MySQL数据库

访问分析是SEO的一项重要工作,但统计.分析工具毕竟功能是针对大众的,很多时候SEO需要一些特定的数据,是http://www.aliyun.com/zixun/aggregation/10341.html">统计分析软件.程序所不能提供的.这样,直接的Web日志分析就是最合适的了,日志中会记录每一个访问情况,只要按自己的意愿提取.组合,就能得到想要的数据. 就这个问题与星箭聊了挺长时间,最后一致认为将日志导入到SQL数据库(MySQL & SQL Server)中,使用SQL语句

用jsp写的表单用户登录页面,访问mysql数据库时候 出错 ,如下图

问题描述 用jsp写的表单用户登录页面,访问mysql数据库时候 出错 ,如下图 在处理登录的时候为什么有时候出现500错误,有时候又出现找不到数据库连接,我用得mysql数据库,驱动程序也添加了的,求大神指教一下啊! 解决方案 可能数据库没连接上(因为不同数据库版本的驱动不同) 来检查你的数据库是否链接上 在你得到的Connection conn=DriverManager.getConnection(参数); 后面加一段代码 if(conn==null) System.out.println

sweeter-导入JavaWeb项目时,MySQL数据库报错

问题描述 导入JavaWeb项目时,MySQL数据库报错 五月 23 2014 10:19:38 上午 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.4.8.五月 23 2014 10:19:39 上午 org.apache.catalina.core.AprLifecycleListene

iis 7-IIS运行时挂掉,数据库偶尔连接错误,可能的原因是什么?

问题描述 IIS运行时挂掉,数据库偶尔连接错误,可能的原因是什么? 我们的平台在运行过程中出了两个错误,其中第一错误出现了三次,问题出现时我们立即查看数据库,发现数据库的访问是正常的:第二个错误连续出现十多次,IIS也挂掉了三次.访问量一分钟大约三四百,请问有可能什么原因造成的呢? 查看系统错误为: 1.在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider:

linux自动定时备份web程序和mysql数据库

前些天受朋友说linux定时备份不知道怎么搞,叫帮忙处理一下.由于这段时间正闲着,所以也就欣然答应.由于朋友对linux不懂也希望我将操作的过程记录下来,也就是越详细越好.所以写得比较$%^&*.本以为半个小时或者一个小时可以搞好,谁不知整整搞了一天.原因在哪呢?这里也顺便吐槽一下,首先问web存放在什么地方?不知,给了个ftp.然后进去一看,各种压缩包,各种目录备份,混乱不堪,为了防止磁盘被撑爆,所以一个个目录确认,哪些目录是要的哪些是不要的,然后一个个删掉.还有mysql数据库,问用的哪个?

mysql数据库-远程连接服务器上,在自己的帐号下建立java连接mysql的程序,但是一直连接不上

问题描述 远程连接服务器上,在自己的帐号下建立java连接mysql的程序,但是一直连接不上 我是通过远程连接在实验室机房的一台机器(linux操作系统)上,然后在该机器上建立JAVA程序,其中涉及到连接mysql数据库的操作,但是在获取连接时一直提示"Communications link failure",涉及的代码为:connect=DriverManager.getConnection(""jdbc:mysql://localhost:3306/pyq_te

MySQL数据库的连接与关闭的示例

MySQL客户机主要用于传递SQL查询给服务器,并显示执行后的结果.可以和服务器运行在同一个机器上,也可以在网络中的两台机器上分别运行.当你连接一个MySQL服务器时,你的身份由你从那台连接的主机和你指定的用户名来决定.所以MySQL在认定身份中会考虑你的主机名和登录的用户名称,只有客户机所在的主机被授予权限才能去连接MySQL服务器.启动操作系统命令后,连接MySQL服务器可以使用如下命令: mysql -h 服务器主机地址 -u 用户名 -p用户密码 其中,各参数的意义如下所示. ★-h:指