背景
今天有项目进行sonar扫描时,报错了,控制台的日志输出如下:
查看原因
查看了web.log,发现是数据库配置问题
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1656853 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
问题出在 SonarQube 生成一个巨大的报告, 然后尝试上传它的压缩包时, 导致 HTTP 500, 因为 MySQL 拒绝接受这样一个大的请求正文。
解决办法
更改服务器mysql配置 (my. cnf文件), 以增加 packed大小 (从默认 10MB, 到任何大于你的报告大小):
[mysqld]
max_allowed_packet = 25M
重新启动 MySQL 和sonar服务来生效。
在jenkins端执行扫描后,发现依然还是报错,再次查看web.log,发现报错信息又变了:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.
查资料发现还是数据库配置这块的问题,在服务器mysql配置 (my. cnf文件)中,增加innodb_log_file_size的配置,如下:
[mysqld]
max_allowed_packet = 25M
innodb_log_file_size=256M
同样重启 MySQL 和sonar服务,再次扫描,发现上传报告这块就OK啦!