[mysql] [python] "MySQL server has gone away (BrokenPipeError(32, ‘Broken pipe’))

[mysql] [python] ["MySQL server has gone away (BrokenPipeError(32, ‘Broken pipe’))]

max_allowed_packet mysql的值重新设置下,我设置为1g就能成功了。
首先登陆mysql查看当前该值的大小。
show variables like ‘%max_allowed_packate%’
修改其大小为1G
set global max_allowed_packet = 102410241024

Mysql修改max_allowed_packet参数

问题

在 Java 程序中如果出现如下错误:

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2084 > 1024). You can change this value on the server by setting the max_allowed_packet’ variable.

原因是 mysql 会限制 server 接受的数据包大小。有时候大的插入和更新超过了 max_allowed_packet 参数限制,会导致写入或者更新失败。于是会出现上面的异常。

解决

首先,查看当前的接收数据包限制,在 mysql 命令行下:

show variables like '%max_allowed_packet%';

显示结果为:1048576(单位为 B),即 1M

Mysql修改max_allowed_packet参数-打不死的小强

那么,怎么修改该参数呢?有以下几种方式

1、命令行修改(该方式重启 Mysql 服务会失效)

在 Mysql 命令行执行:

set global max_allowed_packet = 6*1024*1024

然后退出命令行,再重新进入命令行查看,发现已经变为 6M 了。

Mysql修改max_allowed_packet参数-打不死的小强

但是此方式重启 mysql 服务就会失效。所以我们来看下一种方式。

2、Mysql 配置文件修改

可以编辑 my.cnf(windows 下 my.ini,linux 下一般是/etc/my.cnf)来修改 ,在[mysqld]段或者 mysql 的 server 配置段增加下面配置:

[mysqld]
max_allowed_packet=6M

提示:Linux 下如果找不到 my.cnf,可以通过如下命令查找:

mysql --help | grep my.cn

重启 mysql 服务使之生效。

这里我再扩展下,在用 docker 或者 docker-compose 部署 Mysql 的情况下,修改该参数。

3、Docker 部署下的修改

如果使用 Dockerfile 构建 Mysql 镜像,可以将修改过的配置文件(如:my-lwq.cnf,内容如下)挂载到容器内。

[mysqld]
max_allowed_packet=6M
!includedir /etc/mysql/conf.d/

通过在 Dockerfile 文件加入下面命令挂载 my-lwq.cnf 文件到容器内,然后重新构建镜像即可。

COPY ./my-lwq.cnf /etc/mysql/conf.d/
4、docker-compose 部署下的修改

如果是通过 docker-compose 部署的 mysql,修改 max_allowed_packet 参数,一种方式是可以按照 3、Docker 部署下的修改 中的方式,通过 Dockerfile 挂载配置文件到容器,则除上面操作外,在 docker-compose.yaml 下还需指定自定义镜像构建,该部分配置参考如下:

mysql:
	image: mysql_v1
	build:
		context: .
		dockerfile: Dockerfile.mysql

另一种方式则是直接在 docker-compose.yaml 指定挂载配置文件,该部分配置参考如下:

mysql:
volumes:
\- ./my-lwq.cnf:/etc/mysql/conf.d/my-lwq.cnf

最后运行 docker-compose 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
"ERROR 2006 (HY000): MySQL server has gone away" 是MySQL数据库中常见的错误之一。这个错误通常意味着您的SQL语句执行失败,因为失去了与数据库的连接。错误消息中提到的"MySQL server has gone away"意味着MySQL服务器已经断开连接或关闭。这可能是由于以下几种原因造成的: 1. 连接超时:如果MySQL服务器在指定的时间内没有收到来自客户端的任何请求,它可能会断开连接。这可能是由于网络问题、服务器负载过高或连接闲置时间过长等原因引起的。 2. 数据库服务器重启或崩溃:如果MySQL服务器重新启动或发生崩溃,客户端的连接将被中断。 3. 数据库连接过多:如果MySQL服务器同时处理的连接数超过其配置限制,它可能会关闭一些连接以释放资源。 要解决这个问题,您可以尝试以下方法: 1. 检查网络连接:确保您的网络连接稳定,没有任何中断或故障。 2. 检查连接超时设置:您可以检查MySQL服务器的连接超时设置,并根据需要进行适当的调整。您可以通过修改MySQL配置文件(my.cnf)中的"wait_timeout"参数来增加连接超时时间。 3. 检查服务器负载:如果服务器负载过高,可以尝试减少并发连接数或优化查询以减少服务器负载。 4. 检查数据库连接数限制:您可以通过修改MySQL配置文件(my.cnf)中的"max_connections"参数来增加允许的最大连接数。 5. 检查错误日志:查看MySQL的错误日志,以获取更多关于服务器断开连接的详细信息。错误日志通常位于MySQL的数据目录下。 总之,"ERROR 2006 (HY000): MySQL server has gone away" 错误意味着您的SQL语句执行失败,因为与数据库的连接丢失。您可以通过检查网络连接、连接超时设置、服务器负载、数据库连接数限制以及MySQL的错误日志来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL错误“ERROR 2006 (HY000):MySQL server has gone away”](https://blog.csdn.net/m0_67402013/article/details/124007166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [解决MySQL报错:ERROR 2006 (HY000): MySQL server has gone away No connection(图文并茂)](https://blog.csdn.net/qq_45261963/article/details/121751845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值