【JEECGBOOT 3】连接池druid报错The last packet successfully received from the server was XX milliseconds ago

一、场景

二、问题

三、原因

四、解决方案

五、实战

▶  mysql 连接超时时间

▶  mysql 数据库设置

>  先查询 mysql 超时时间 :

>  方式一:docker-compose.yaml 安装数据库时,使用 command (推荐)

>  方式二:修改 my.cnf(/etc/my.cnf 文件所在位置)

▶  java 中 mysql 连接设置

六、效果


一、场景

  • IDEA 2021

  • JEECG BOOT 3.6

  • MYSQL 5.7

  • Spring boot 2.7.10

二、问题

启动报错

The last packet successfully received from the server was 11,012 milliseconds ago. The last packet sent successfully to the server was 11,012 milliseconds ago.

三、原因

        MySQL连接已经超时了,即长时间没有收到新的查询请求。连接处于空闲状态而被MySQL服务器关闭。

 

四、解决方案

你可以尝试使用以下方法来解决这个问题:

  • 检查数据库服务器和应用服务器之间的网络连接是否正常,特别是在高延迟或不稳定的网络环境下。

  • 增加数据库连接的超时时间,这可以通过在JDBC URL中添加"autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000"参数实现(具体数值可以根据实际情况调整)。

  • 使用 数据库连接池来管理连接,可以更好地控制连接的超时时间和重连逻辑。

  • 检查数据库是否已满,如果数据库已经使用了大量的系统资源,那么此时数据库的性能可能很低,以至于无法响应新的查询请求。

五、实战

▶  mysql 连接超时时间

        分 mysql 数据库设置 + java中mysql连接设置

▶  mysql 数据库设置

>  先查询 mysql 超时时间 :
show variables like '%timeout%';

 

>  方式一:docker-compose.yaml 安装数据库时,使用 command (推荐)
  • 重新构建数据库即可:执行 docker-compose up -d --build
  mysql:
    image: mysql:5.7.28
    container_name: mysql
    ports:
      - 3306:3306
    restart: always
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: jeecg123456
    command:
      --connect_timeout=60
      --max_connections=16000
      --max_user_connections=2000
      --interactive_timeout=1200000
      --wait_timeout=1200000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
      --lower_case_table_names=1
    volumes: 
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/mysql/my.cnf
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 500M
>  方式二:修改 my.cnf/etc/my.cnf 文件所在位置)
  • mysql 5 以上的版本修改 my.cnf 找到[mysqld]后面加上如下两行代码
wait_timeout=1200000
interactive_timeout=1200000

  • 重启mysql服务在次执行show variables like ‘%timeout%’;命令查看wait_timeout连接等待时间

▶  java 中 mysql 连接设置

>  连接mysql url添加参数 

&keepAlive=true&autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000

 

六、效果

  • 由之前11秒没有触发连接查询,到现在延长至687秒(约11.2分钟)

posted @ 2023-12-08 15:39  随风落木  阅读(144)  评论(0编辑  收藏  举报  来源