最近在運行的項目出現了一個線上事故,有人反映商城的東西下不了單了,到后台看了一下,果然報了一個錯
Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1046 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; ]; Packet for query is too large (1046 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1046 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
其實上面的報錯信息就給出了解決方案了,原來mysql根據配置文件會限制server接受的數據包大小。如果一次插入數據庫中的數據太大的話就會失敗,官方也有這方面的介紹 官方介紹
用命令行查看show VARIABLES like '%max_allowed_packet%';果然max_allowed_packet太小了
解決方法
1、修改配置文件(推薦)
在mysql中的my.ini文件中(在programdata隱藏文件中),修改max_allowed_packet的值
比如:max_allowed_packet=20M
然后重啟mysql就可以
2、命令行中設置
set global max_allowed_packet = 210241024*10 然后退出命令行后再登錄查看show VARIABLES like '%max_allowed_packet%'
但是這個方法沒什么用,因為重啟mysql服務后這個方法就失效了
又出現問題了,過了幾天max_allowed_packet又被改了,經排查可能是數據庫被入侵了,原來數據庫的密碼太過於簡單,改成了復雜的密碼后再也沒出現這個問題了