1. 程式人生 > >【異常】 Packet for query is too large (1220 > 1024). You can change this value on the server by setting

【異常】 Packet for query is too large (1220 > 1024). You can change this value on the server by setting


問題:
【異常】Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1220 > 1024). You can change this value on the server by setting the max_allowed_packet' variable

原因:
有時候大的插入和更新會受max_allowed_packet 引數限制,導致寫入或者更新失敗。
mysql max_allowed_packet 設定過小導致記錄寫入失敗
mysql根據配置檔案會限制server接受的資料包大小。

解決方法一:mysql控制檯命令方式

    1.通過mysql客戶端,檢視目前配置:show VARIABLES like '%max_allowed_packet%'; 預設為1M。
    
    2.改為更大的值:set global max_allowed_packet = 2*1024*1024*10;  (修改後,重啟資料庫會生效!)
    
解決方法二:修改配置檔案my.cnf方式

    1.在MySQL安裝目錄下的my.ini檔案中的[mysqld]段中的找到"max_allowed_packet = 1M"。
    
    2.修改為自己想要的值(如果沒有這行內容,自己新增上去,即:max_allowed_packet=20M)儲存,重起MySQL服務。
    注意:該值設定過小將導致單個記錄超過限制後寫入資料庫失敗,且後續記錄寫入也將失敗。

    注: max_allowed_packet = 20M
    通過方法二修改完成後,通過客戶端生效。 但發現,過一段時間(有時幾個小時,有時1~2天),自動變為1024。
    繼續查資料,是伺服器記憶體不足的問題,導致MySQL自動重新設定引數。
    
    建議:不要把一臺伺服器的記憶體都用光了,要預留多點記憶體,另外mysql和Java程式最好分開部署。