場景: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