今天碰到了一个如上的异常,在执行一个查询功能时后台会报错,没有返回查询结果。
一般是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配置是否被修改 |