MySQL server has gone away (BrokenPipeError(32, ‘Broken pipe‘))

MySQL server has gone away 错误通常与以下几种情况相关:

1.	max_allowed_packet 设置过低:某些查询或数据包超过了 max_allowed_packet 的限制。
2.	连接超时:MySQL 服务器长时间没有收到客户端请求,导致连接超时。
3.	服务器资源问题:MySQL 服务器因内存不足或其他资源问题导致连接中断。

解决方案

1.增加 max_allowed_packet

确保 max_allowed_packet 参数设置足够大,通常可以设置为 64MB 或更高:

在 docker-compose.yml 中:
version: '3'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
      --tls_version="TLSv1.2,TLSv1.3"
      --init-file=/data/application/init.sql
      --max_allowed_packet=64M
    volumes:
      - db_data:/var/lib/mysql
      - ./init.sql:/data/application/init.sql
    ports:
      - "3306:3306"

volumes:
  db_data:
2. 增加 wait_timeout 和 interactive_timeout

增加连接的超时时间,以防止连接因空闲时间过长而断开:

在 docker-compose.yml 中:

version: '3'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
      --tls_version="TLSv1.2,TLSv1.3"
      --init-file=/data/application/init.sql
      --max_allowed_packet=64M
      --wait_timeout=28800
      --interactive_timeout=28800
    volumes:
      - db_data:/var/lib/mysql
      - ./init.sql:/data/application/init.sql
    ports:
      - "3306:3306"

volumes:
  db_data:
3. 检查服务器资源

确保 MySQL 服务器有足够的资源(如内存、CPU)来处理你的查询和连接。可以通过监控工具检查服务器的资源使用情况。

4. 检查应用程序代码

确保应用程序正确管理数据库连接,并且没有长时间运行的事务或未提交的事务。

重新启动 Docker 容器

修改 docker-compose.yml 文件后,重新启动 Docker 容器以使更改生效:

docker-compose down
docker-compose up -d

验证配置

docker exec -it <container_name> mysql -u root -p
SHOW VARIABLES LIKE 'max_allowed_packet';
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

确保输出显示的值为你设置的大小和超时时间。

通过以上步骤,你可以解决 MySQL server has gone away 错误,并确保你的 MySQL 服务器能够处理较大的数据包和长时间的连接。

相关推荐

  1. STM<span style='color:red;'>32</span>

    STM32

    2024-07-20 02:20:02      42 阅读
  2. STM<span style='color:red;'>32</span>

    STM32

    2024-07-20 02:20:02      27 阅读
  3. STM<span style='color:red;'>32</span>

    STM32

    2024-07-20 02:20:02      24 阅读
  4. STM<span style='color:red;'>32</span>

    STM32

    2024-07-20 02:20:02      26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 02:20:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 02:20:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 02:20:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 02:20:02       55 阅读

热门阅读

  1. Python基础学习Day_06

    2024-07-20 02:20:02       16 阅读
  2. android SpannableStringBuilder span 设置点击事件

    2024-07-20 02:20:02       17 阅读
  3. 牛客算法入门01

    2024-07-20 02:20:02       13 阅读
  4. Webpack基础学习-Day01

    2024-07-20 02:20:02       15 阅读
  5. Git技巧:如何重命名你的分支

    2024-07-20 02:20:02       15 阅读
  6. RocketMQ

    RocketMQ

    2024-07-20 02:20:02      17 阅读
  7. 请求头中的Cookie和Referer(学习笔记)

    2024-07-20 02:20:02       18 阅读
  8. 麻醉病人的护理

    2024-07-20 02:20:02       14 阅读
  9. 比较HTTP/1.1、HTTP/2

    2024-07-20 02:20:02       17 阅读
  10. oracle decode 使用if else

    2024-07-20 02:20:02       16 阅读