mysql5.7版本sql_mode=only_full_group_by问题完美解决

今天升级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

 

 

你可能感兴趣的:(mysql,工作问题)