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服務後,將永