Docker mysql 5.7解决ONLY_FULL_GROUP_BY报错
mysql 5.7及以上版本在使用group by字段有时候会报错。
原因分析:MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。
其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。
查看mysql的sql模式
SELECT @@sql_mode;
接下来只要修改配置文件,将only_full_group_by模式关闭即可。
第一步
以bash命令方式进入容器内部
docker exec -it cb0c299f061e /bin/bash
注意:红色的地方需要换成你的mysql容器id
第二步
进入容器etc目录
cd /etc
第三步
- 编辑my.cof文件
vim my.cof
- 设置sql模式
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
docker restart cb0c299f061e
注意:红色的地方需要换成你的mysql容器id
再次查看sql模式
你可能遇见的问题
readonly option is set (add ! to override)错误
一般是在容器目录中的my.cnf文件是只读文件,这时候需要我们授权chomd -R 777 /etc/my.cnf的操作,对my.cnf进行内容编辑及保存后再次修改为chomd -R 644 /etc/my.cnf (mysql的保护机制,防止my.cnf被别人随意更改)
但是在容器中没有sudo权限,这里需要我们将容器etc目录下的my.cnf文件拷贝到本地root根目录下,进行操作
docker cp cb0c299f061e:/etc/my.cnf /root
修改my.cnf的读写权限
chomd -R 777 my.cnf
修改文件内容
将my.cnf读写权限降级
chomd -R 644 my.cnf
将本地根目录下的my.cnf文件复制到容器目录下
docker cp my.cnf cb0c299f061e:/etc/
至此,已经完成my.cnf的修改,只要将docker 的mysql容器重新启动,再次读取my.cnf的配置信息即可
另外附上查看mysql容器日志的命令
docker logs -f cb0c299f061e
Memorial Day is 575 days |