MySQL 数据库在 Windows 下修复 only_full_group_by 的错误

本机上新安装了个MySQL数据库,在插入数据的时候一直提示这个错误:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这个错误的原因在于sql_mode的值,我们需要去掉only_full_group_by 

寻找配置文件

1、Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。

2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。

3、Linux用rpm包安装的MySQL是不会安装/etc/my.cnf文件的。

至于为什么没有这个文件而MySQL却也能正常启动和作用,有两个说法:

第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动;

第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL。

解决方法:只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

修改配置文件

我只是添加了一行配置sql_mode,值是通过查询数据库中的值去掉only_full_group_by。

SELECT @@sql_mode;

文件内容:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:Programmermysqlmysql-8.0.11-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:Programmermysqlmysql-8.0.11-winx64data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
# 设置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'

重启数据库

在手动修改了Mysql的配置文件之后,我们要重启Mysql服务才能使之生效,这里提供几种重启方法:

1、windows下重新启动mysql5的方法:
在安装mysql时系统会添加服务,可以通过管理工具里面的 <服务> 一项来停止和启动mysql。这样修改的my.ini就会生效了。

2、也可以用命令行模式,在运行里输入:
停止:

net stop mysql

(其中mysql为你安装的mysql服务名称)

启动:

net start mysql

3、如果你没安装系统服务,也可在命令行模式定位到mysql下的bin目录里,输入:

关闭:

mysqladmin shutdown

启动:

mysqladmin start

不过我在停止服务的时候遇到了问题,提示访问被拒绝。

这是权限不足,必须使用管理员身份启动命令行窗口。

在 C:WindowsSystem32 目录下找到了 cmd.exe 文件,右键“以管理员身份运行”,然后再执行停止的命令就OK了。

最后并没有解决问题,可能是我的mysql8版本过高了,上面方法应该对mysql5有效吧。。。。。。。。。。有时间研究下为啥?

原文地址:https://www.cnblogs.com/wbxk/p/10597839.html