centos7 mysql 5.5到5.7升级小记

MYSQL升级的过程

故事的一开始是这样的:做为一个码农,在windows上写好了代码,准备在服务器上跑一下试试看怎么样,于是就打包上去了,结果数据库都迁移不过去,视图、存储过程都出问题了。然后就手动拷贝吧,结果错误的还是出错了,好在有对应的错误码,就开始查错了,最后发现服务器的数据库版本是MariaDB5.5 开发环境的是Mysql5.7。
然后就开始了坎坷的升级路程。
- Mysql升级
- 更新数据存储结构
- 解决group by依赖的问题


Mysql升级

直接上服务器执行。。。。
(逃,大不了就删库跑路吧 哈哈哈)

yum update mysql-sever

然后就跟着提示【y/d/n】 直接y就可以了

更新数据存储结构

mysql-upgrade -uroot -p

接着输入密码,接着就开始更新了。

解决group by依赖的问题

这个是更新中遇到的最麻烦的问题,百度了半天各种解决方法都有,知道是mysql5.7一个新的特征,又是sql_mode有一个ONLY_FULL_GROUP_BY的值,然后改了半天my.cnf还有set global,可是在执行存储过程的时候还是报了1055的错。我也很难受啊,怎么办呢?
最后在mysql的5.7的参考文件里面找到了解决办法

SQL92及更早版本不允许查询的选择列表,HAVING条件或ORDER BY列表引用未在GROUP BY子句中命名的非聚集列

然后就看栗子嘛,好多,还好Chrome自带翻译的功能,就看到怎么解决了!

如果你知道,对于一个给定的数据集, 每个name值实际上唯一确定了这个address值,这address 在功能上是有效的依赖的 name。要告诉MySQL接受查询,你可以使用这个ANY_VALUE()函数:
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
或者,禁用 ONLY_FULL_GROUP_BY

最后我在我数据的一列加上了ANY_VALUE()解决了。


[1]: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html MySQL 5.7参考手册 MySQL处理GROUP BY

你可能感兴趣的:(MySQL)