MySQL Packet for query is too large 問題及解決方法
問題描述:
報錯資訊:
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1354 > 1024). You can change this value on the server
by setting the max_allowed_packet' variable
MySQL根據配置檔案會限制Server接受的資料包大小。有時候插入、更新或查詢時資料包的大小,會受 max_allowed_packet 引數限制,導致操作失敗。
檢視 max_allowed_packet 引數:
在客戶端執行:
show VARIABLES like '%max_allowed_packet%';
得到結果如下:
+--------------------+------------+ | Variable_name | Value | +--------------------+-------------------+ | max_allowed_packet | 1024 | +--------------------+-------------------+
修改方法:
1、修改配置檔案
可以編輯my.cnf來修改(windows下my.ini),在[mysqld]段或者mysql的server配置段進行修改。
max_allowed_packet = 20M
如果找不到my.cnf可以通過
mysql --help | grep my.cnf
去尋找my.cnf檔案。
linux下該檔案在/etc/下。
2、在mysql命令列中修改
set global max_allowed_packet = 2*1024*1024*10 //這裡的數值為位元組數,這裡改為20M,需要重新登陸客戶端起作用
注:在客戶端用命令修改後,只能暫時起作用,重新啟動MYSQL後,會恢復原來的值。
Linux下mysql 報Packet for query is too large (1040 > 1024)錯誤的解決方法
專案之前一直正常執行,這幾天突然一直提示查詢出錯,看了下日誌發現提示Packet for query is too large (1040 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.錯誤。百度瞭解決方法,記錄下解決過程。
1.原因
查詢資料庫返回的資料包太大,超過了預設值。
登入mysql,在控制檯輸入一下命令查詢預設的max_allowed_packet值,發現只有1024
show VARIABLES like '%max_allowed_packet%';
2.修改預設最大允許包大小
2.1方式一:命令方式
(1).在mysql控制檯下輸入以下命令,設定max_allowed_packet為20M
set global max_allowed_packet = 20*1024*1024;
(2).退出mysql,重啟mysql服務,再登入myql中查詢max_allowed_packet是否修改成功
show VARIABLES like '%max_allowed_packet%';
2.2方式二:修改配置檔案my.cnf方式
(1).mysql控制檯下輸入以下命令,編輯my.cnf
sudo vi /etc/mysql/my.cnf
(2).在[mysqId]下面新增
max_allowed_packet = 20M
2.2退出編輯模式,重啟mysql,步驟如2.1的(2)所示
3.注
配置完查詢max_allowed_packet發現是16777216,實際上是16*1024*1024,並不是期望的20M,於是又查了下,可能是伺服器記憶體容量不夠,因為java就佔了很多,所以mysql可能會自動重設引數。所以某些情況下可能是你當時更改完max_allowed_packet引數,過一段時間mysql自動重設引數變為預設的1024,又出現了同樣的錯誤。