MySQL 執行SQL文件,報錯:」Got a packet bigger than 'max_allowed_packet' bytes「

場景:mysql

本地執行SQL文件,每次執行到附件表時mysql就會報錯提示:」Got a packet bigger than 'max_allowed_packet' bytes「,並終止了數據庫導入操做。sql

緣由分析:數據庫

項目中是把附件轉換成byte數組,存入數據庫類型爲mediumblob的字段中。因爲附件較多,致使單表數據量較大,因而大致定位到mysql會對單表數據量較大的SQL作限制。數組

解決過程:
1.進入mysql服務器

在DOS命令窗口輸入 mysql -hlocalhost -uroot -p 回車進行mysql數據庫。code

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

-u爲數據庫用戶名,root是mysql默認用戶名;sql語句

-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服務後,將永久生效)
 

max_allowed_packet的單位爲字節:

-- 轉化爲Mb,就是1024Mb
mysql> select 1073741824/1024/1024;
+----------------------+
| 1073741824/1024/1024 |
+----------------------+
| 1024.00000000        |
+----------------------+
1 row in set
相關文章
相關標籤/搜索