今天升级mysql数据库至5.7版本,启动程序发现好多功能出现sql_mode=only_full_group_by的问题,几经波折,终于完美解决问题,特作总结。
首先查看数据库的sql_mode:
select @@global.sql_mode
结果为:
ONLY_FULL_GROUP_BY,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这一项,修改后重启数据库,再查询,ONLY_FULL_GROUP_BY不存在,欣喜若狂,测试程序,发现还是报这个错误,然后打开mysql的启动配置文件my.cnf,发现里面的参数sql_mode的值已经不包含ONLY_FULL_GROUP_BY了,但是不清楚为什么没有生效,所以怀疑是不是mysql的启动没有读取my.cnf文件
执行指令
mysql --help|grep my.cnf
结果为mysql的配置读取顺序:
/etc/my.cnf
basedir/my.cnf
datadir/my.cnf
--defaults-extra-file #在读取全局配置文件之后,读取用户配置文件(~/.my.cnf)之前,读取extra指定的参数文件
~/.my.cnf #家目录下面的隐藏文件,my.cnf前面的点,说明my.cnf是隐藏文件
我修改的文件是/etc/my.cnf,按理来说,应该生效才对,但是感觉mysql启动跳过了这个文件,而且提示
World-writable config file '/etc/my.cnf' is ignored
字面意思为启动忽略此配置文件,造成的原因可能是此文件的访问权限太大(即非root用户也可以修改),所以mysql启动时认为其不安全,就跳过此配置,寻找下一个配置,到这里,想必大家应该知道解决方法了吧?
我这里查看/etc/my.cnf的权限
ls -l /etc/my.cnf
结果为:
-rwxrwxrwx root root 24 Oct 16 16:07 /etc/my.cnf 即777(所有用户都有读、写、执行权限)
这样肯定不合理,将其改为644(只有拥有者有读写权限;而属组用户和其他用户只有读权限。)即可
chmod 644 /etc/my.cnf
欢迎大家和帝都的雁积极互动,头脑交流会比个人埋头苦学更有效!共勉!
公众号:帝都的雁