Mysql中max_allowed_packet参数

今天研发人员在调试java程序的时候,发现了mysql报出如下问题:文章源自靠谱运维-https://www.ixdba.net/archives/20

java.lang.IllegalArgumentException: Packet is larger than max_allowed_packet from server configuration of 1048576 bytes文章源自靠谱运维-https://www.ixdba.net/archives/20

        at org.gjt.mm.mysql.Buffer.ensureCapacity(Buffer.java:398)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at org.gjt.mm.mysql.Buffer.writeBytesNoNull(Buffer.java:386)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(PreparedStatement.java:352)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.database.DBManager.execute(DBManager.java:450)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.publish.PreparePublish.saveSiteInstanceXmlIntoDB(PreparePublish.java:827)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.publish.PreparePublish.generatePublishFiles(PreparePublish.java:181)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.publish.PublishManager.publish(PublishManager.java:180)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.synchronize.InstanceSynchronize.publishSite(InstanceSynchronize.java:954)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.site.Site.publish(Site.java:365)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at com.cicro.cws.site.Site.run(Site.java:338)文章源自靠谱运维-https://www.ixdba.net/archives/20

        at java.lang.Thread.run(Thread.java:536)文章源自靠谱运维-https://www.ixdba.net/archives/20

 文章源自靠谱运维-https://www.ixdba.net/archives/20

解决如下:文章源自靠谱运维-https://www.ixdba.net/archives/20

这个问题是因为导入的sql文件大于系统默认的max_allowed_packet的值,解决方法:比如在my.cnf修改增加到:max_allowed_packet=32M #或者更高,当然也可以在mysqld启动的时候加入这个参数,但是该变量必须在mysqld重新启动的时候才加载生效,所以必须重起mysqld!文章源自靠谱运维-https://www.ixdba.net/archives/20

我是把max_allowed_packet参数加载到了mysql启动文件mysqld中,mysqld文件部分设置如下:文章源自靠谱运维-https://www.ixdba.net/archives/20

${MYSQL}/bin/mysqld --user=mysql --datadir=${MYSQL}/data "$@" \文章源自靠谱运维-https://www.ixdba.net/archives/20

--language=${MYSQL}/share/mysql/english -O max_connections=500 -O wait_timeout=600 \文章源自靠谱运维-https://www.ixdba.net/archives/20

-O key_buffer=32M --max_allowed_packet=32M --port=${port} --socket=/tmp/mysql.sock &文章源自靠谱运维-https://www.ixdba.net/archives/20

 文章源自靠谱运维-https://www.ixdba.net/archives/20

其中 --max_allowed_packet=32M必须有前面的――符号。文章源自靠谱运维-https://www.ixdba.net/archives/20

 文章源自靠谱运维-https://www.ixdba.net/archives/20

关于max_allowed_packet一些资料:文章源自靠谱运维-https://www.ixdba.net/archives/20

许多MySQL程序有一些内部变量可以在运行时设置。程序变量的设置与带有值的其它长选项相同。文章源自靠谱运维-https://www.ixdba.net/archives/20

例如,mysql有一个max_allowed_packet变量,可以控制其通信缓冲区的最大长度。要想为mysql将max_allowed_packet变量的值设置为16MB,使用下面的任何一个命令:文章源自靠谱运维-https://www.ixdba.net/archives/20

shell> mysql --max_allowed_packet=16777216文章源自靠谱运维-https://www.ixdba.net/archives/20

shell> mysql --max_allowed_packet=16M文章源自靠谱运维-https://www.ixdba.net/archives/20

第1个命令以字节指定值。第2个命令以兆字节指定值。变量值可以有一个后缀K、M或者G(可以为大写或小写)来表示千字节、兆字节或者十亿字节的单位。文章源自靠谱运维-https://www.ixdba.net/archives/20

在选项文件中,变量设定值没有引导破折号:文章源自靠谱运维-https://www.ixdba.net/archives/20

[mysql]文章源自靠谱运维-https://www.ixdba.net/archives/20

max_allowed_packet=16777216文章源自靠谱运维-https://www.ixdba.net/archives/20

或:文章源自靠谱运维-https://www.ixdba.net/archives/20

[mysql]文章源自靠谱运维-https://www.ixdba.net/archives/20

max_allowed_packet=16M文章源自靠谱运维-https://www.ixdba.net/archives/20

如果你喜欢,变量名的下划线可以为破折号。文章源自靠谱运维-https://www.ixdba.net/archives/20

注:max_allowed_packet参数是在mysql4以后才有的,在mysql4以前版本,还没有这个参数文章源自靠谱运维-https://www.ixdba.net/archives/20

此外,还可以通过再/etc/增加my.cnf文件,在my.cnf中设置max_allowed_packet=16M,然后重启mysql也可.至于my.cnf的获得,可以从mysql主目录的support-files下通过更改模版得到.文章源自靠谱运维-https://www.ixdba.net/archives/20

  • 本文由 发表于 2012年6月7日15:19:20
  • 转载请务必保留本文链接:https://www.ixdba.net/archives/20
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  2   博主  0
    • Ylellan
      Ylellan 0

      One or two to reembmer, that is.

      • Fiorino
        Fiorino 0

        Superbly ilulminatnig data here, thanks!