1. 程式人生 > >com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2280 > 2048).異常的解決方法

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2280 > 2048).異常的解決方法

mes mode process trac image pan bst chang sub

今天碰到了一個如上的異常,在執行一個查詢功能時後臺會報錯,沒有返回查詢結果。

一般是Linux服務器的mysql的配置文件出現問題(同樣的數據在本地不報錯),mysql重啟時可能會重置配置文件導致,或者被人惡意修改。

我的報錯如下:

嚴重: Servlet.service() for servlet [dispatcherServlet] in context with path [/******] threw exception [Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet] with root cause


com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2280 > 2048). You can change this value on the server by setting the max_allowed_packet‘ variable.

網上查了一些方法,主要問題就是max_allowed_packet 參數不符合要求,總結如下

找到my.cnf配置文件,Linux下輸入命令 mysql --help | grep my.cnf

技術分享

如下顯示了幾個路徑,但是可能有些路徑是沒有文件的,一般是默認在第一個 /etc/my.cnf(總之找到這個文件就可以)

也有可能沒有該配置文件,就可以在etc下新建一個my.cnf文件

找到配置文件後在最後加一列 max_allowed_packet=32M

重啟mysql服務 service mysqld restart

下面是我的配置文件:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
lower_case_table_names=1
max_allowed_packet=100M

symbolic-links=0


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]


log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_allowed_packet=32M

以上僅供參考

以後再遇到此類問題可以直接查看my.cnf配置是否被修改

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2280 > 2048).異常的解決方法