仍然报错_only_full_group_by配置,竟让所有应用报错?

推荐学习

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

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

c40eb9348381ead5614ab5e3c3cbf05a.png

从异常信息可以看出,报错的原因是因为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的,导致了该错误。

4133e1b1607f3b67f7e4ebe8dbb736ca.png

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

cd9fe7f8fe89b135eadefdfcde7c9c93.png


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

7278b19166893b6db72081f25cd848d8.png

2. 原因分析

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

fa5fb26486061f8e0162b91b21a34ba7.png

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

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

398176060acfa1bcee23deacc7b67229.png

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

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

4e4a98bcdb0c8ee36723d4f7ae1d0558.png

因为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';
f8417fcaa4bb3798339d2e5387be1a53.png
d133268c4b4836ed2f98fd6e5490dd05.png

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

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

1f014a3022bebc15ba2bfbd2d0cc3adf.png
db7dfdf4aa63d9cc11b35269afe145f0.png
ae31a9b84eb94d9897e3358c07dae0be.png

这也是为什么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的位置是不是不对(放在最后是不会生效的):

c2e2670b77aa6215ca2ca8bfed24587b.png

作者:申城异乡人

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据录入的计算公式计算_污水处理工程设计入门(10)—堰口计算

呓语:虽然现在很多人会推送很多的快速计算表格,但是我并不想授人以鱼。我希望每一个想学习想入门做污水处理工程设计的人先看懂如何设计,再去想如何快速计算,再去想怎么改进。再者,想想有一天你当领导审图了&#xff0…

DNN SEO专题 (收集)

SEO, 是Search Engine Optimization的缩写, 翻译过来是“搜索引擎优化", 直白说就是“针对搜索引擎所做的优化处理工作”。 是一种利用搜索引擎的搜索规则来提高目的网站在有关搜索引擎( Google, Baidu, Live Search 等) 内提名的方式。它可以给你的网站带来更多的客户访问…

发送请求_发送soap请求调用WSDL

");soap.Append("");soap.Append("");soap.Append("XX系统");soap.Append("");soap.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));soap.Append("");soap.Append("{"LoginName":&qu…

递归函数python有什么特点_Python中的递归

在前面的讲解中,函数的调用通常发生在彼此不同的函数之间。其实,函数还有一种特殊的调用方式,那就是自己调用自己,这种方式称为函数递归调用。 递归,在程序设计中也是一个常用的技巧,甚至是一种思维方式&am…

XML基本知识(三)

XML语法(3)--属性、声明符号、字符数据、注释 属性&#xff1a;提供元素的附加信息。 属性是元素开始标签的一部分。eg: <para keywords"Napoleon,France,history">...</para>注意: 属性由“名”和“值”组成&#xff0c;中间有“”分隔。值由引号包括…

apache实验报告 linux_Linux实验报告

Linux实验报告-源代码编译安装Apache(Tarball文件安装)实验背景&#xff1a;通常GNU组织提供的程序包都是源代码格式&#xff0c;即将软件的所有源码文件先以tar打包&#xff0c;然后再使用gizp或是bzip2压缩&#xff0c;生成一个.tar.gz或是.tar.bz2结尾的软件包&#xff0c;也…

python合并两个文本文件内容_用Python 将两个文件的内容合并成一个新的文件.

一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetworking Technologies, Platform Technologies, Information Technology for Users, Computer Forensics, Enterprise Networks, Database Technologies 还有一个是: BN108, MN401, MN503, B…

设备场景函数——72个

说明&#xff1a;本类 API 函数&#xff0c;内容均摘自网络&#xff0c;版权归实际作者所有。 CombineRgn 将两个区域组合为一个新区域 CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 CreateDC,Cre…

安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!

原标题&#xff1a;你的安卓手机越来越卡&#xff1f;教你4招轻松解决问题&#xff01;现在我们对于手机的使用时间不会特别的长&#xff0c;所以这个更换的速度就比较快。其实是很多的用户换手机是因为比较喜欢用新的手机体验新的科技&#xff0c;不过也还是有很多的用户不是因…

python 导入自己写的类_python中自己的类不能被导入

我自己编写了一个类 class Settings(): def __init__(self): self.screen_width1200 self.screen_height800 self.bg_color(230,230,230) 然后我想在引用 import sys import pygame from settings import Settings def run_game(): pygame.init() ai_settingsSettings() screen…

关于使用在webforms里使用routing遇到的问题

看了重典的两篇文章 System.Web.Routing入门及进阶 上篇 System.Web.Routing入门及进阶 下篇 仿照其中的进行了操作&#xff0c;发现怎么不都起作用&#xff0c;非常奇怪&#xff0c;搜了好多才找到了解决方案 是在MSDN上找到的&#xff0c;如下&#xff1a; To configure …

python调用父类构造函数需要放在第一句吗_Python继承和调用父类构造函数

这是我正在Python中做的&#xff1a;class BaseClass:def __init__(self):print The base class constructor ran!self.__test 42class ChildClass(BaseClass):def __init__(self):print The child class constructor ran!BaseClass.__init__(self)def doSomething(self):prin…

python千位分隔符_python – 为pandas数据帧中的整数设置千位分隔符

我正在尝试使用{&#xff1a;,}’.格式(数字),如下例所示,格式化pandas数据帧中的数字&#xff1a; # This works for floats and integers print {:,}.format(20000) # 20,000 print {:,}.format(20000.0) # 20,000.0 问题是,对于具有整数的数据帧不起作用,并且在具有float的数…

[导入]【翻译】WF从入门到精通(第十章):事件活动

摘要: 学习完本章&#xff0c;你将掌握&#xff1a;1.使用HandleExtenalEvent活动创建特定的事件处理程序2.在你的工作流中使用Delay活动3.在你的工作流中使用EventDriven活动4.在你的工作流中使用Listen活动5.理解EventHandlingScope活动在活动并发执行的情况下是怎样监听事件…

mysql查询返回xml格式_MySQL数据库查询操作XML的经验分享

mysql里面有内置的操作xml的函数。分别是ExtractValue()和UpdateXML()函数。语法&#xff1a;1EXTRACTVALUE (fiedname, XPathstring);第一个参数&#xff1a;fiedname是String格式&#xff0c;为表中的字段名第二个参数&#xff1a;XPathstring (Xpath格式的字符串) &#xff…

DOM解析原理

DOM解析原理 关键字: xml w3c dom属性和方法用于处理XML文档的DOM元素属性 属性名 描述 childNodes 返回当前元素所有子元素的数组 firstChild 返回当前元素的第一个下级子元素 lastChild 返回当前元素的最后一个子元素 nextSibling 返回紧跟在当前元素后面的元素 no…

wordpress发布模块_如何用WordPress打造出一个类似知乎的问答站点

像打造一个像知乎这样的在线问答社区吗&#xff1f;问答网站非常有意思&#xff0c;而且用户活跃度也高&#xff0c;有很多非常有用的信息。在这篇文章中&#xff0c;我们将向你展示如何在没有任何编程经验的情况下利用WordPress快速打造一个问答类网站。你可以将整个网站做成问…

mysql 密码sha256_MySQL5.6启用sha256_password插件

一、背景&#xff1a;使用MySQL5.6过程中&#xff0c;发现默认的加密插件为mysql_native_password。而sha256_password的安全程度要比mysql_native_password高&#xff0c;尝试切换为sha256_password。二、配置过程&#xff1a;资料&#xff1a;1、从MySQL官网查询到服务器端sh…

Windows 窗体启动和关闭的事件顺序

对于关注对 Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说&#xff0c;事件引发的顺序特别重要。当某种情况需要小心处理事件时&#xff08;如重绘窗体的某些部分时&#xff09;&#xff0c;必须知道事件在运行时的确切引发顺序。本文提供了一些有关在应用…

ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs

本节内容摘自《操作系统真象还原》&#xff0c;请大家支持正版Bochs下载安装在完成了linux发行版的安装后&#xff0c;现在到了安装bochs的环节&#xff0c;这是我们的操作系统最终的宿主机。由于我的工作是运维&#xff0c;所以练就了任何软件包都要从源码安装的“陋习”&…