应用总结

下面是MySQL实际应用中遇到的问题及解决方案

max_allowed_packet


  • 问题场景

    游戏开发中的捏脸功能,角色可以编辑英雄的面部,对于服务器而言只需要存储面部数据即可,这块面部数据较大,当执行update语句更新数据库时, 返回如下错误

      error_desc:Got a packet bigger than 'max_allowed_packet' bytes
    

    可以推测这个update数据包太大了,查看MySQL这个变量的值:

      show variables like '%max_allowed_packet%';
    	
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | max_allowed_packet       | 2048  |
      | slave_max_allowed_packet | 2048  |
      +--------------------------+-------+
    

    这个变量是2KB,显然太小了

  • 解决方案

    临时设置这个变量

      set global max_allowed_packet=152428800(必须是字节大小);
    

    终极方案是修改MySQL配置文件,也就是my.cnf

      [mysqld]
    
      max_allowed_packet=1M
    

    注意修改配置文件可以是以M为单位,重启MySQL服务

      service mysqld stop
      service mysqld start
    

再次更新捏脸数据,成功更新