MySQL:MySQL server has gone away解决

    我出现这个报错,是在C++项目中用Mysql的库函数mysql_real_query往数据库中插入数据的时候出现的,插入的数据有7M、8M。通过网上搜索这个错误,了解到是因为我们写入的数据太大了,在使用msyql导入大文件sql的时候也可能会出现这个错误的。这个问题是max_allowed_packet配置的默认值太小了,该项的作用是限制mysql服务器端接收到的包的大小,所以我们发送的值超过这个设置值的话,机会导致服务端不接受这些数据而出错。

    要解决这个问题,只需要调整max_allowed_packet的大小就行了。

    查看max_allowed_packet的大小:

MariaDB [(none)]> show global variables like "max_allowed_packet";
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| max_allowed_packet | 1048576   |
+--------------------+-----------+
1 row in set (0.00 sec)

    可以看到我这里默认情况下只有1M大小,将其设置成150M(1024*1024*150):

MariaDB [(none)]> set global max_allowed_packet=157286400;
Query OK, 0 rows affected (0.00 sec

    然后再次使用上面的命令就可以看到已经成功修改了。

    但上面的设置方法只对当前有效,重启mysql就会恢复到默认值了,我们可以修改mysql的配置文件my.cnf使其永久生效,只需要添加下面的内容就行了。

max_allowed_packet=150M

     一般情况下并不是经常需要这个大量数据的导入操作,用临时修改的方式就可以了,如果是项目上必然会不定期有大量数据的导入,则需要用配置文件修改的方式了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值