zoukankan      html  css  js  c++  java
  • MySQL max_allowed_packet设置及问题

    MySQL max_allowed_packet设置及问题

    场景:

    当日志中出现了诸如:“Package for query is too large (xxxxxxxx > 4194304). You can change this value on the server by setting the max_allowed_package variable”或者本地执行SQL文件出现了“Got a packet bigger than 'max_allowed_packet' bytes”提示,错误的本身就清楚的提示了对应的方式。

    原因分析:

    mysql根据配置文件会限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败,导致项目访问异常。

    解决过程:

    1. 进入mysql

      mysql -hlocalhost -uroot -p 回车进行mysql数据库。

    2. 查看max_allowed_packet最大允许包

      输入命令 show VARIABLES like '%max_allowed_packet%';

      显示如下

      +--------------------------+------------+
      | Variable_name | Value |
      +--------------------------+------------+
      | max_allowed_packet | 4194304 |
      | slave_max_allowed_packet | 1073741824 |
      +--------------------------+------------+
      2 rows in set, 1 warning (0.01 sec)

      可以从返回结果看出max_allowed_packet当前为4M,显然小了。

    3. 更改max_allowed_packet包大小

      方案一,临时修改:输入命令 set global max_allowed_packet = 2*1024*1024*10; (注意,这里的大小只能填写字节。重启mysql服务后,配置将会失效!)然后关闭掉这此mysql server链接,再进入查看。

      方案二,修改my.ini文件,在[mysqld]部分加入 max_allowed_packet=大小

      (注意,这里可以写XXM,但后面不用加";"号。如果存在max_allowed_packet,直接调整其值。重启mysql服务后,将永久生效)

      mysql --help | grep my.cnf

      去寻找my.cnf文件。linux下该文件在/etc/下。

      方案三,官网给出的解决办法是加启动参数,找到mysql的启动脚本,把启动参数贴上

    说明

    包或任何生成的/中间字符串的最大大小。这个过程大部分发生在load data file中,有时也发生在update,insert中。
    包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。
    如果你使用大的BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。max_allowed_packet的协议限制为1GB。这个值必须是1024的倍数;如果不是1024倍数的值,mysql就会自动四舍五入为最接近的1024的倍数。

    当你改变max_allowed_packet的值,你就改变了消息缓冲区的大小,你也应该在客户端允许的范围内修改客户端的buffer大小。在客户端,max_allowed_packet默认值是1GB。你可以通过命令行或者配置文件,改变客户端的max_allowed_packet值。

    在MySQL5.0.84版本中,会话max_allowed_packet值,还只是只读的。在5.0.84之前的版本,设置会话中可以设置max_allowed_packet的值,但是没什么作用。

    参考文档:

    解决mysql执行SQL文件,报错。

    MySQL调整max_allowed_packet的大小。

    记录一次mysql 5.7 max_allowed_packet修改失败的问题。

  • 相关阅读:
    Netty之SubPage级别的内存分配
    Netty之Page级别的内存分配
    Netty内存池及命中缓存的分配
    新建maven工程问题001
    Eclipse使用技巧
    excel使用技巧
    java 单例模式
    springmvc拦截器验证登录时间
    Filter实现用户名验证
    springMVC的配置文件路径问题
  • 原文地址:https://www.cnblogs.com/g120/p/13941322.html
Copyright © 2011-2022 走看看