云数据库-mysql5.7升级成mysql8

最近,阿里云有台mysql5.7的云数据库,需要手动升级成mysql8,由于升级了一个大版本,还是遇到了一些问题,记录一下遇到的问题,方便以后避坑.

1、 迁移准备

购买一台和原有数据库一样配置的mysql8,数据库购买好以后需要对比下mysql5.7的配置文件等数据,尽量将mysql8的基本配置(配置文件,账号,ip白名单)和mysql5.7配置成一样。

2、配置好以后可以开始准备迁移,迁移前建立好对应的数据库,然后使用阿里云的DTS工具进行增量迁移,增量迁移不影响原有数据库的正常使用,收费增量迁移时是按小时算,全量迁移和结构迁移不收费。
出现问题:选择字符集为utf8mb4,在云数据库控制台建立数据库后,发现mysql8的默认字符排序为utf8mb4_0900_ai_ci,而原有的mysql5.7默认字符排序是utf8mb4_general_ci,为保证两边排序规则一样,所以需要建立完数据库后,需要手动修改mysql8的排序规则。
在这里插入图片描述
在这里插入图片描述

3、 利用DTS完成迁移,具体迁移方法,
参照https://help.aliyun.com/document_detail/26626.html?spm=a2c4g.11186623.2.7.3b631421Xvhi7S

4、迁移完成以后发现某些sql的group by 执行报错,原因如下:
这个错误一般发生在mysql 5.7以及 5.7以上的版本中,其原因是mysql的默认配置中,sql_mode=“ONLY_FULL_GROUP_BY” 这个配置严格执行了 ‘SQL92标准’,所以很高网站维护人员在升级mysql版本时,都会修改 sql_mode 的配置,使其能兼容。

修改方法:
1、最快的办法就是将sql_mode 配置里面的ONLY_FULL_GROUP_BY去掉
2、修改sql语句,使其符合ONLY_FULL_GROUP_BY规则,从sql层面来说,输出的结果是做target list,就是 select 后面跟着的字段,还有一个地方是 group by column,就是 group 后面跟着的字段,由于开启了 ONLY_FULL_GROUP_BY 的设置,如果没有字段在 target list 以及 group by 字段中同时出现,那么 sql 就认为此条语句是不合法的,就会抛出错误。但对于运行的服务,如果内嵌的sql较多,可能修改起来比较麻烦。

总结:总体来说,迁移过程还是比较顺利,顺便给大家一个DTS云数据库之间迁移时间的参考
我是两台同地区的云数据库,数据量大概230G,DTS迁移只需要3,4个小时,还是比较快的。

猜你喜欢

转载自blog.csdn.net/ssiyla/article/details/108099375