zoukankan      html  css  js  c++  java
  • Communications link failure的解决办法

    使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

    Communications link failure,The last packet successfully received from the server was *** millisecond

    ago.The last packet successfully sent to the server was ***  millisecond ago。

    其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

    大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

    MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,

    MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申

    请使用该连接时,就会导致上

    面的报错。

    修改MySQL的参数,wait_timeout最大为31536000即1年,在my.cnf中加入:

    [mysqld]

    wait_timeout=31536000

    interactive_timeout=31536000

    重启mysql生效,需要同时修改这两个参数。

    错误的原因:MySQL服务在长时间不连接之后断开了,断开之后的首次请求会抛出这个异常

    原因分析:1、既然是长时间不连接之后断开了,那这个时间应该是可以设定的,或者现在mysql用的还

    是默认的值

           2、如何查看现在的时间值,以及如何修改我的mysql是安装在windows系统上,就以这个说明,若是

    在开发中mysql安装在linux上,操作步骤几乎一样

    查看默认值:1、DOC命令启动mysql:mysql -hlocalhost -u用户名 -p密码

    2、查看和连接mysql时间有关的系统变量:show variables like '%timeout%'

    1)interactive_timeout:
    参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用

    CLIENT_INTERACTIVE选项的客户端。
    参数默认值:28800秒(8小时)

    (2)wait_timeout:
    参数含义:服务器关闭非交互连接之前等待活动的秒数。
    在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户

    端类型(由mysql_real_connect()

    的连接选项CLIENT_INTERACTIVE定义)。
    参数默认值:28800秒(8小时)

    wait_timeout:超时控制的变量,其时间为长度为28800s,就是8个小时,在8个小时之后会断开,需要重新连

    接,可以在访问的url中使用

    jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来是连接自动恢复,但这是mysql4及其以下版本

    使用,在mysql5中已经无效,必须调整系统变量来控制

    Mysql5中对wait_timeout和interactive_timeout有两个说明:interactive_timeout:服务器关闭交互式连接前等待

    活动的秒数。交互式客户端定义为在

    mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout 

       wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局

    interactive_timeout值初始化

    会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),

    又见interactive_timeout 

    结论:若要修改的话,需要同时修改这两个变量

    变量值大小确定:修改的话,如果变量值有范围大小限制,肯定不要超过变量的最大范围值,查资料知:

    在windows环境中:1-2147483s,

    Linux环境中:1-31536000s

    Windows下修改:在%MySQL HOME%/bin下有mysql.ini配置文件,打开后在如下位置添加两个变量,赋值。

    (这里修改为388000) 

    保存退出,重启mysql服务,一定是重启mysql服务,便能看到修改结果

    windows下的配置文件具体是哪个需要从windows系统服务中找到mysql,打开属性,看“可执行文件路径”里面

    的参数值,因为它可能是my.cnf而

    不是my.ini,这是由于安装时的设置,我们可能会忽略它。 

    Linux环境下修改:配置文件在:cd /etc/my.cnf

    扩展:1.MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望

    客户端在连接到MySQL Server处理完

    相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白

    消耗内存,而且如果连接一直在累

    加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于

    wait_timeout的值设定,应该根据系统

    的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现

    有大量的sleep状态的连接进程,

    则说明该参数设置的过大,可以进行适当的调整小些。

           2.编程时也可以使用连接池设置超时时间,配置相对简单。但修改数据库更为本质一些

     
     
     
     
    端口号为下图中的端口号:3306
     

     解决方法:注意Connection URL的端口号

     
     
     如图即可成功。
  • 相关阅读:
    Oracle优化器:星型转换
    Latches and Tuning:Buffer Cache
    [转]Oracle销售人员普遍腐败?
    Veritas ODM Async and Oracle
    How to set LOGSOURCE PATHMAP on GoldenGate
    Merry Christmas Sql Statement
    Goldengate OGG常见问题与错误列表
    Sqlserver 2005 配置 数据库镜像:1418错误:该错误很可能是安全方面的配置问题引起的
    Sqlserver 2005 配置 数据库镜像:为镜像准备镜像数据库 (TransactSQL)
    Sqlserver 2005 配置 数据库镜像:概述
  • 原文地址:https://www.cnblogs.com/cn-chy-com/p/7783012.html
Copyright © 2011-2022 走看看