程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Mysql中max

編輯:MYSQL入門知識
 

今天研發人員在調試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 "$@" \

--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必須有前面的――符號。

 

關於max_allowed_packet一些資料:

許多MySQL程序有一些內部變量可以在運行時設置。程序變量的設置與帶有值的其它長選項相同。

例如,mysql有一個max_allowed_packet變量,可以控制其通信緩沖區的最大長度。要想為mysql將max_allowed_packet變量的值設置為16MB,使用下面的任何一個命令:

shell> mysql --max_allowed_packet=16777216

shell> mysql --max_allowed_packet=16M

第1個命令以字節指定值。第2個命令以兆字節指定值。變量值可以有一個後綴K、M或者G(可以為大寫或小寫)來表示千字節、兆字節或者十億字節的單位。

在選項文件中,變量設定值沒有引導破折號:

[mysql]

max_allowed_packet=16777216

或:

[mysql]

max_allowed_packet=16M

如果你喜歡,變量名的下劃線可以為破折號。

注:max_allowed_packet參數是在mysql4以後才有的,在mysql4以前版本,還沒有這個參數

此外,還可以通過再/etc/增加my.cnf文件,在my.cnf中設置max_allowed_packet=16M,然後重啟mysql也可.至於my.cnf的獲得,可以從mysql主目錄的support-files下通過更改模版得到.

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved