美文网首页RxJavaJava服务器端编程
MySql连接空闲8小时自动断开的原因及连接池配置方法

MySql连接空闲8小时自动断开的原因及连接池配置方法

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-01-07 07:21 被阅读0次

    上一篇 <<<MySQL发展历程与整体架构
    下一篇 >>>


    数据库连接超时时间查询

    非交互式超时时间,如 JDBC 程序
    show global variables like 'wait_timeout';
    交互式超时时间,如数据库工具
    show global variables like 'interactive_timeout';
    MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接。

    8小时自动断开引起的问题解决办法

    a.定时发送JDBC语句(不推荐)

    b.增加 MySQL 的 wait_timeout 属性的值 (不推荐)

    修改mysql安装目录下的配置文件 my.ini文件(如果没有此文件,复制“my-default.ini”文件,生成“复件 my-default.ini”文件。将“复件 my-default.ini”文件重命名成“my.ini” ),在文件中设置:

    wait_timeout=31536000  
    interactive_timeout=31536000 
    

    这两个参数的默认值是8小时(60608=28800)。 注意: 1.wait_timeout的最大值只允许2147483 (24天左右),也可以使用mysql命令对这两个属性进行修改。

    c.配置连接池(推荐)

    使用数据库连接池 自带功能 定时清理空闲超时的jdbc连接。
    show global status like 'Thread%';
    Threads_cached--- 服务器端缓存连接;
    Threads_connected ---当前打开的连接数
    Threads_created ---创建的线程数
    Threads_running---正在运行的线程
    tips:
    a、配置最小连接数5,最大连接数10,则会提前创建5个连接,当不够时会再次创建,但不超过10个。每个连接请求如果未使用则会自动回收销毁,但会保持最小5个连接数不会销毁。
    b、数据库连接池和线程池一样,使用链表形式存储(前面是少使用的,后面是最近刚被使用的)。
    --获取连接:每次获取链表的头结点,并且删除该头结点的引用关系
    --释放连接:将该连接放入链表的后面

    //连接数配置为2的响应结果:
    第1次发送连接:com.mysql.jdbc.JDBC4Connection@6b09bb57
    第1次查询结果:id:5,orderName100
    第2次发送连接:com.mysql.jdbc.JDBC4Connection@1d16f93d
    第2次查询结果:id:5,orderName100
    第3次发送连接:com.mysql.jdbc.JDBC4Connection@6b09bb57
    第3次查询结果:id:5,orderName100
    第4次发送连接:com.mysql.jdbc.JDBC4Connection@1d16f93d
    第4次查询结果:id:5,orderName100
    第5次发送连接:com.mysql.jdbc.JDBC4Connection@6b09bb57
    第5次查询结果:id:5,orderName100
    第6次发送连接:com.mysql.jdbc.JDBC4Connection@1d16f93d
    第6次查询结果:id:5,orderName100
    第7次发送连接:com.mysql.jdbc.JDBC4Connection@6b09bb57
    第7次查询结果:id:5,orderName100
    第8次发送连接:com.mysql.jdbc.JDBC4Connection@1d16f93d
    第8次查询结果:id:5,orderName100
    第9次发送连接:com.mysql.jdbc.JDBC4Connection@6b09bb57
    第9次查询结果:id:5,orderName100
    第10次发送连接:com.mysql.jdbc.JDBC4Connection@1d16f93d
    第10次查询结果:id:5,orderName100
    

    通讯类型

    同步调用:基于请求与响应;
    异步调用:服务器端单独开启一个线程处理比较耗时间代码;
    优点:防止客户端阻塞;
    缺点:
    1.客户端不能够及时获取到响应结果
    2.开启单独一个线程异步处理 有可能会非常消耗cpu资源

    连接方式【MySQL JDBC长连接】

    长连接:每次建立连接完成之后,会将该连接保存起来实现复用,不会频繁创建连接,避免tcp三次握手和四次挥手。

    优点:避免重复创建tcp三次握手和四次挥手(socket)
    缺点: 有可能浪费我们服务器端资源;空闲超时时间
    应用场景:频繁发送请求提高效率

    短连接:每次发送请求完成之后,都会把连接关闭;
    优点:避免浪费我们服务器的资源;
    缺点: 每次建立连接的时候需要经历tcp三次握手,如果在频繁发送请求的情况下效率有可能会降低;

    数据传输模式

    单工: 数据单向发送
    半双工: 数据双向传输,但不能同时传输 (mysql 采用半双工模式)
    全双工:数据双向传输,可以同时传输

    设定所接受的包的大小:
    show variables like '%max_allowed_packet%';
    根据情形不同,其缺省值可能是1M或者4M。
    最大值是1G(1073741824),如果设置超过1G,查看最终生效结果也只有1G。

    通讯协议

    Unix非网络协议、TCP/IP套接字
    Unix非网络协议:在linux 操作系统中客户端和服务器端都在同一台电脑上,客户端访问mysql使用Unix 协议非网络协议。
    TCP/IP套接字:客户端与服务器不在同一台电脑上 采用网络方式实现通讯
    命名管道和内存共享
    在window系统中客户端和Mysql服务器在同一台电脑上,可以使用命名管道和共享内存的方式,
    命名管道开启:–shared-memory=on/off;
    共享内存开启:–enable-named-pipe=on/off;

    相关文章

      网友评论

        本文标题:MySql连接空闲8小时自动断开的原因及连接池配置方法

        本文链接:https://www.haomeiwen.com/subject/blhgnktx.html