美文网首页
应用获取不到数据 - 解决报错:The last packet

应用获取不到数据 - 解决报错:The last packet

作者: 程序猿蛋蛋哥 | 来源:发表于2020-09-27 22:35 被阅读0次

    开发部署的应用程序,一直都在正常运行,但最近一次访问,突然获取不到数据。

    报错主要信息:

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    

    错误解析:

    从错误信息中可以看出,应用与mysql服务器的通信链接失败了,接收不到mysql服务器返回的数据包。

    解决方法总结:

    方法一:

    检查数据库连接地址是否正确。(配置文件中url)

    方法二:

    mysql5以前的版本在jdbc连接url上增加autoReconnect=true配置(表示自动连接)

    方法三:

    mysql5将其连接的等待时间wait_timeout缺省为8小时(28800秒),如果在wait_timeout期间内,数据库连接一直处于等待状态,mysql5将关闭连接,此时,应用的连接池仍然合法持有该数据库的连接引用,但当执行数据库操作时,就出现了上述报错。

    mysql-wait_timeout.png

    因此,解决方法就是:修改mysql全局变量wait_timeout的值。

    怎么修改wait_timeout的值呢?
    在文件my.ini的最后增加一行:wait_timeout=2073600 ,然后重启mysql(2073600秒 = 24天)

    说明:my.init文件,windows系统中在mysql的安装目录下,如:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
    linux系统中位置为/etc/my.ini,或在/etc目录或其他目录下查找一下:find /etc/ -type f -name 'my.ini' -printf '%p \n'

    扩展学习:

    1. 与mysql服务器的连接方式

    与mysql服务器的连接方式,分为两种:交互式连接,非交互式连接。

    <1> 交互式连接
    交互式连接:指的是客户端方式连接,连接到mysql服务器,一般都有重连机制(断开后操作sql会自动连接)
    可分为:

    • 指令连接
      CMD终端命令执行连接指令,连接mysql服务器。
      #mysql -hlocalhost -p3306 -u root -p
    • 工具连接
      如navicat数据库管理工具,连接mysql时,内部封装了客户端连接指令。

    <2> 非交互式连接
    非交互式连接:指的是非客户端方式连接,如应用程序连接池,JDBC等

    2. 参数说明

    <1> wait_timeout
    wait_timeout:表示非交互式连接时,连接处于空闲状态多久,会被mysql切断掉。
    默认是28800秒,即8小时。这个默认的时间比较短。(非交互式连接,wait_timeout才生效)

    mysql-wait_timeout.png

    <1> interactive_timeout
    interactive_timeout:表示交互式连接,连接处于空闲状态多久,会被mysql切断掉。
    默认是28800秒,即8小时。(交互式连接,interactive_timeout才生效)

    mysql-interactive_timeout.png

    3. 连接异常情况整理

    情况1:The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

    情况2:ERROR 2013 (HY000): Lost connection to MySQL server during query

    情况1和情况2为非交互式连接(如tomcat运行项目)请求访问数据库连接异常。

    情况3:ERROR 2006 (HY000): MySQL server has gone away. No connection. Trying to reconnect...

    情况3为交互式连接异常,如客户端连接到命令行mysql>...

    相关文章

      网友评论

          本文标题:应用获取不到数据 - 解决报错:The last packet

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