推荐学习

  • 周一福利到!献上“独家全新”MySQL进阶套餐,简直就是血赚
  • 全网独家的“MySQL高级知识”集合,骨灰级收藏,手慢则无

1. 踩坑经历

一个很平常的下午,大家都在埋头认真写bug呢,突然企业微信群里炸锅了,好多应用都出现大量的Error日志,而且都报同一个错误,就是下面这个:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘online_saas.t.receive_amount’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

从异常信息可以看出,报错的原因是因为Sql语句SELECT后面的列包含了group by后面没有的列并且没有使用聚合函数。

因为近几天一直未发布,所以就问运维是不是改了MySql服务器的配置,打开了sql_mode里的only_full_group_by,导致原本执行正常的Sql通不过检查而执行失败。

最后运维说有台MySql服务器之前曾用Sql语句临时关闭过 only_full_group_by , 而刚刚因为负载过高自动重启了,导致sql_mode又使用了原有的默认值,而MySql 5.7以后sql_mode默认是开启only_full_group_by的,导致了该错误。

最后运维修改了这台MySql服务器的my.cnf文件,将sql_mode里的only_full_group_by关闭了,重启了MySql服务器和报错的应用,事情得以最终解决。

为啥要重启应用呢?是因为运维修改配置后,各个应用还是报错,所以重启了各个报错的应用。

2. 原因分析

假设你安装的是MySql 5.7以后的版本,比如5.7.21,默认情况下,sql_mode里的only_full_group_by是被打开的:

这个打开后,对Sql的语法检查就会很严格,就比如上面报错的Sql语句,就是因为使用GROUP BY不规范造成的。

正常情况下,我们使用GROUP BY语句都是下面这样的:

SELECT语句后的列,要么是GROUP BY语句后面出现的列,要么是使用了聚合函数。

但如果有些地方写的不规范,就会报错,比如下面这样:

因为age列既没有出现在GROUP BY语句后,也没有使用聚合函数。

但如果我们将sql_mode里的only_full_group_by关闭,上面报错的语句就不报错了:

SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

注意事项:如果仍然报错,请打开新会话执行查询语句。

还要值得注意的是,上面关闭only_full_group_by的方式是临时的,如果重启了MySql服务器,only_full_group_by又被打开了,如下所示:

这也是为什么MySql服务器自动重启后,我们的应用开始报错的原因,因为运维之前确实改过,但是是临时改的,重启后又被覆盖了。

3. 推荐解决方案

如果没有历史技术债,这个开关打开也挺好的,可以让大家按规范写Sql,如果不规范,就能及时发现。

但如果有历史技术债,就需要关闭only_full_group_by了,而且要永久性的关闭,避免MySql服务器重启后配置又被覆盖的情况。

可以通过在==/etc/my.cnf==文件添加以下内容,来永久关闭only_full_group_by:

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

修改完毕后,记得重启MySql。

如果重启后也不会生效,检查下sql_mode的位置是不是不对(放在最后是不会生效的):

作者:申城异乡人

原文链接:https://blog.csdn.net/zwwhnly/article/details/109022654

仍然报错_only_full_group_by配置,竟让所有应用报错?相关推荐

  1. 所有的service报红但不报错_从一个应用报错来看centos系统的/tmp目录自动清理规则...

    概述 分享最近应用碰到的一个奇怪bug,一开始以为是代码上的问题,找了一段时间发现居然是因为系统的一个自动清理规则导致,下面一起来看看吧~ 一.应用报错: logwire.core.exception ...

  2. electron + vue /打包linux应用报错记录

    1. electron + vue 打包linux应用报错记录 >  icon图标导致的报错 ⨯ unknown output format set github.com/develar/app ...

  3. sanic学习踩坑记录:第一坑——sanic_jinja2应用报错ModuleNotFoundError: No module named ‘AppName‘

    刚开始学习使用sanic,发现有一些坑,随手记录一下:以供后来者共同学习,避免踩坑: # 使用的软件版本 python 3.8.10 sanic 21.9.3 sanic-jinja2 0.10.0 ...

  4. deepfacelab应用报错原因和解决办法

    deepfacelab软件运行报错,请翻看最后的报错信息,就是Error这一句开始后面的信息.多数都有,有一些没有 镇帖错误 1: oom 显存不足 注意看软件错误界面,单凡是出现了oom字样,说明是 ...

  5. tomcat发布应用报错Error starting child

    使用tomcat发布应用程序是报错: SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploy ...

  6. idea springboot应用报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd

    记录一个遇到的奇葩问题. 2021-07-01 22:36:26.668 INFO 6608 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Init ...

  7. 【错误记录】Android 模拟器安装应用报错 ( INSTALL_FAILED_INSUFFICIENT_STORAGE )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Android 模拟器调试程序 , 报错如下 : 06/24 16:36:23: Launching 'APP_MIDI' on Androi ...

  8. 关于 麒麟系统启动应用报错“undefined symbol: __cxa_throw_bad_array_new_length, version Qt_5“ 的解决方法

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125516818 红胖子(红模仿)的博文大全:开发技术集 ...

  9. electron 打包后启动应用报错:Error: ENOENT: no such file or directory, open ‘xxx/manifest.json‘‘

    使用 electron-builder 打包后启动报错: Reading /xxx/manifest.json failed. Error: ENOENT: no such file or direc ...

最新文章

  1. web server大全之GoAhead移植(转载)
  2. svn清理失败且乱码 问题解决(转)
  3. pandas数据清洗
  4. c++多线程队列 类对象
  5. 脑动力:C语言函数速查效率手册(附DVD光盘1张) [平
  6. vSphere利用NTP为主机同步时间
  7. 昨日之我,今日之我与明日之我
  8. Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true
  9. Leet Code OJ 235. Lowest Common Ancestor of a Binary Search Tree [Difficulty: Easy]
  10. CSAPP:第八章 异常控制流1
  11. python制作软件excel_利用Python制作一个 截图+Excel操作浏览器小工具
  12. scala代码示例_Scala异常处理示例
  13. OpenStack手动制作CentOS 7 KVM镜像
  14. java剪刀石头布编程_Java如何编写石头剪子布游戏程序
  15. 微信小程序上传图片使用canvas添加水印
  16. Java随机生成中文姓名工具
  17. 深信服C++ 一面(技术面、70min、offer)
  18. 游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟)
  19. native crash
  20. 信息资源管理【四】之 信息资源内容管理

热门文章

  1. scss-!optional
  2. What?一个 Dubbo 服务启动要两个小时!
  3. 小程序 报错errMsg: “hideLoading:fail:toast can‘t be found“ ?
  4. MongoDB存储基础教程
  5. ADO.NET 事务控制
  6. 自己初学时的随笔记录
  7. javascript 相关小的知识点集合
  8. Regular Exprassion--正则表达式基础
  9. sql server 自定义函数的使用
  10. [LeetCode]Find Minimum in Rotated Sorted Array