1. 程式人生 > >MySQL 執行SQL檔案,報錯:”Got a packet bigger than 'max_allowed_packet' bytes“

MySQL 執行SQL檔案,報錯:”Got a packet bigger than 'max_allowed_packet' bytes“

開發十年,就只剩下這套架構體系了! >>>   

場景:

本地執行SQL檔案,每次執行到附件表時mysql就會報錯提示:”Got a packet bigger than 'max_allowed_packet' bytes“,並終止了資料庫匯入操作。

原因分析:

專案中是把附件轉換成byte陣列,存入資料庫型別為mediumblob的欄位中。由於附件較多,導致單表資料量較大,於是大體定位到mysql會對單表資料量較大的SQL做限制。

解決過程:
1.進入mysql

在DOS命令視窗輸入 mysql -hlocalhost -uroot -p 回車進行mysql資料庫。

其中-h表示伺服器名,localhost表示本地;

-u為資料庫使用者名稱,root是mysql預設使用者名稱;

-p為密碼;

如果設定了密碼,可直接在-p後連結輸入,如:-p123456,使用者沒有設定密碼,顯示Enter password時,直接回車即可。

注意,如果mysql沒有安裝在C盤下,需要先使用DOS命令進入mysql的安裝目錄下的bin目錄中


2.檢視max_allowed_packet最大允許包

輸入命令 show VARIABLES like '%max_allowed_packet%';

回車即可檢視max_allowed_packet最大允許包,解釋一下包大小這個東西:簡單來說就是mysql把當前執行的mysql語句看作是一個包,而對這個包大小的限制是對當前mysql語句長度的限制。

顯示如下

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 4194304    |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set, 1 warning (0.01 sec)

可以從返回結果看出max_allowed_packet當前為4M,顯然小了。


3.更改max_allowed_packet包大小

方案一,修改:輸入命以下命令(重啟mysql生效)

set global max_allowed_packet = 2*1024*1024*10

 

方案二,修改my.ini檔案,在[mysqld]部分加入 max_allowed_packet=大小

(注意,這裡可以寫XXM,但後面不用加";"號。如果存在max_allowed_packet,直接調整其值。重啟mysql服務後,將永