MySQL根据配置文件会限制Server接受的数据包大小,有时候大的插入和更新会受 max_allowed_packet 参数限制,导致大数据写入或者更新失败。
下面介绍下最近碰到的问题及修改该参数的方法。
因为最近的运营系统运行报错,查看Tomcat日志提示The driver has not received any packets from the server,属于mysql数据库限制Server接受的数据包问题。
mysql数据库在写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。修改增加max_allowed_packet=100M后报错解决。
mysql> show VARIABLES like 'max_allowed_packet';
max_allowed_packet的单位为字节:
-- 转化为Mb,就是1024Mb mysql> select 1073741824/1024/1024;
可以编辑my.cnf,在[mysqld]段或者mysql的server配置段进行修改。
max_allowed_packet = 100M
修改my.cnf,配置要重载才能生效
这里大家根据需要配置就行了。
参数生效范围为global,不是session. 如果服务器重启设置会失效
set global max_allowed_packet = 1024*1024*1024
这里还是比较推荐第一个方法,如果实在不想重启可以用这个方式。
max_allowed_packet 值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败,为了数据完整性,需要考虑到事务因素。