原因是max_allowed_packet 值設置過小。
網上粘貼一段定義:
max_allowed_packet:指代mysql服務器端和客戶端在一次傳送數據包的過程當中數據包的大小
這個是定義mysql服務器端和客戶端在一次傳送數據包的過程當中數據包的大小
定義過大,比如max_allowed_packet=8092,有可能服務器端太忙,來不及接收,或者網絡太差,會容易造成丟包
定義過小,會因為客戶端可能無法快速接收服務器端發過來的包,一般推薦是4096
網上說有兩種方法:
方法一,直接修改my.cnf(Linux)或者my.ini(windows)的文件,例如:
max_allowed_packet=10M
然后重啟MySQL服務。但是我試過之后不行,原因也不得而知。
方法二,通過MySQL自帶的客戶端(黑框界面),通過命令先查看目前的max_allowed_packet 值的大小:
show VARIABLES like '%max_allowed_packet%';
查出來的值的單位是字節(byte)
設置時默認的單位也是字節,比如你要設置為100M,那么應該是100*1024*1024,執行修改命令為:
set global max_allowed_packet = 100*1024*1024
修改后需要關掉cmd窗口,然后重新打開,再次查詢,才能看到修改后的新值,否則看到的還是原始值(緩存)。
ps:具體該為多少,需要視具體情況而定,可能修改之后,還是報同樣的錯誤,沒關系,那就設置的再大一些。我因為sql文件有4個多G,最終將max_allowed_packet設置成了1G(即,1024*1024*1024)