今天研发人员在调试java程序的时候,发现了mysql报出如下问题:
java.lang.IllegalArgumentException: Packet is larger than max_allowed_packet from server configuration of 1048576 bytes
at org.gjt.mm.mysql.Buffer.ensureCapacity(Buffer.java:398)
at org.gjt.mm.mysql.Buffer.writeBytesNoNull(Buffer.java:386)
at org.gjt.mm.mysql.PreparedStatement.executeUpdate(PreparedStatement.java:352)
at com.cicro.cws.database.DBManager.execute(DBManager.java:450)
at com.cicro.cws.publish.PreparePublish.saveSiteInstanceXmlIntoDB(PreparePublish.java:827)
at com.cicro.cws.publish.PreparePublish.generatePublishFiles(PreparePublish.java:181)
at com.cicro.cws.publish.PublishManager.publish(PublishManager.java:180)
at com.cicro.cws.synchronize.InstanceSynchronize.publishSite(InstanceSynchronize.java:954)
at com.cicro.cws.site.Site.publish(Site.java:365)
at com.cicro.cws.site.Site.run(Site.java:338)
at java.lang.Thread.run(Thread.java:536)
解决如下:
这个问题是因为导入的sql文件大于系统默认的max_allowed_packet的值,解决方法:比如在my.cnf修改增加到:max_allowed_packet=32M #或者更高,当然也可以在mysqld启动的时候加入这个参数,但是该变量必须在mysqld重新启动的时候才加载生效,所以必须重起mysqld!
我是把max_allowed_packet参数加载到了mysql启动文件mysqld中,mysqld文件部分设置如下:
${MYSQL}/bin/mysqld --user=mysql --datadir=${MYSQL}/data "[email protected]" \
--language=${MYSQL}/share/mysql/english -O max_connections=500 -O wait_timeout=600 \
-O key_buffer=32M --max_allowed_packet=32M --port=${port} --socket=/tmp/mysql.sock &
其中 --max_allowed_packet=32M必须有前面的――符号。
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/