如何永久禁用MySQL的ONLY_FULL_GROUP_BY,重启服务器后仍生效
永久禁用MySQL ONLY_FULL_GROUP_BY参数解决方案
你之前的操作失效的原因如下:
set global修改仅对当前运行的MySQL实例生效,服务重启后会自动读取配置文件的配置,本身就不具备持久性- 修改my.ini未生效,大概率是配置路径错误、配置放错了段落、权限不足三类原因
1. 确认系统加载的正确配置文件路径
首先要找到MySQL实际读取的配置文件,避免错改了其他目录下的无效配置:
- Windows系统:以管理员身份打开命令提示符,执行命令
mysqld --verbose --help | findstr /i "my.ini"
输出结果中靠前的路径就是MySQL优先加载的配置文件,修改这个路径下的文件才会生效 - Linux系统:执行命令
mysqld --verbose --help | grep my.cnf
同理取靠前的路径修改
2. 正确编辑配置文件
打开正确的配置文件后,找到[mysqld]配置段,必须将sql_mode配置放在[mysqld]段下,放在[client]、[mysql]等其他段均不会生效,新增或修改对应的配置行:
[mysqld] # 保留原有其他配置不动,仅修改或新增以下sql_mode行,确认不含ONLY_FULL_GROUP_BY即可 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
配置注意事项:
- 参数值不要加单引号或双引号,直接写值即可
- 如果文件中已存在sql_mode配置行,直接修改原值删除ONLY_FULL_GROUP_BY即可,不要重复添加配置行导致冲突
- Windows下修改后如果无法保存,确认你是用管理员身份打开的文本编辑器
- Linux下修改后执行
chmod 644 你的配置文件路径保证权限正确,避免MySQL读取失败
3. 重启MySQL服务生效
修改配置后必须重启MySQL服务才会加载新配置:
- Windows:管理员身份执行
net stop mysql && net start mysql,如果你的MySQL服务名不是mysql,替换为对应的服务名即可 - Linux:根据系统执行
systemctl restart mysqld或service mysql restart
4. 验证配置生效
重启后登录MySQL,执行SELECT @@global.sql_mode;,查询结果中没有ONLY_FULL_GROUP_BY即说明配置成功。
内容的提问来源于stack exchange,提问作者raza9798
相关产品推荐
相关产品推荐

