1. 程式人生 > 資料庫 >MySQL Packet for query is too large 問題及解決方法

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,又出現了同樣的錯誤。