MySQL server has gone away 问题的解决方法

本文详细解析了在MySQL中遇到的server has gone away错误,主要原因是由于max_allowed_packet参数设置过小,无法处理大数据导入。文中提供了两种修改方法,一是通过配置文件持久化修改,二是命令行临时修改,并提醒了修改后的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间,应领导要求,把现网数据导入开发数据库中,报出MySQL server has gone away问题,经过排查发现是执行SQL时,SQL文件过大导致的

 

MySQL会根据配置文件会限制server接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。

 

查看当前配置:

mysql> show variables like 'max_allowed_packet';

+--------------------+---------+

| Variable_name      | Value   |

+--------------------+---------+

| max_allowed_packet | 4194304 |

+--------------------+---------+

1 row in set (0.00 sec)

 

也可以用select查看:

mysql> select @@max_allowed_packet;

+----------------------+

| @@max_allowed_packet |

+----------------------+

|              4194304 |

+----------------------+

1 row in set (0.00 sec)

 

max_allowed_packet 如果不设置,默认值在不同的 MySQL 版本表现不同,有的版本默认1M,有的版本默认4M。

 

修改方法1(配置文件持久化修改):

vim /etc/my.cnf

[mysqld]

max_allowed_packet = 100M

 

注意:修改配置文件以后,需要重启mysql服务才能生效。

mysql

1、启动 service mysql start

2、停止 service mysql stop

3、重启 service mysql restart

 

修改方法2(命令行临时修改):

 

mysql> set global max_allowed_packet = 100 * 1024 * 1024;

mysql> exit

 

注意:

1.命令行修改时,不能用M、G,只能这算成字节数设置。配置文件修改才允许设置M、G单位。

2.命令行修改之后,需要退出当前回话(关闭当前mysql server链接),然后重新登录才能查看修改后的值。通过命令行修改只能临时生效,下次数据库重启后又复原了。

3.max_allowed_packet 最大值是1G(1073741824),如果设置超过1G,查看最终生效结果也只有1G。

 

其他:

在进行大数据导入时,需要注意观察磁盘占有情况,如果磁盘已满的话,导入数据也会出现报错

 

相关参考文章

写入MySQL报错超出 max_allowed_packet 的问题:

https://blog.youkuaiyun.com/sunny05296/article/details/80446944

MySQL server has gone away 问题的解决方法:

https://blog.youkuaiyun.com/boshuzhang/article/details/73603772

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值