一直用阿里云RDS,系统时间比较久,mysql还是5.6版本,因为是2016年购买的服务,系统服务一直在运行中。
2021年底时候跟老板提了升级阿里云RDS,看了阿里云社区RDS mysql升级情况,在线升级可以升级到5.7版本,不支持升级到8.0。做背景调查时候mysql8.0相比5.6性能提升了30%左右,就确定升级到最新版本使用。
先购买RDS mysql 8.0实例,然后阿里云数据传输服务DTS,从老版本5.6同步到8.0数据,然后开启实时同步。用一个子域名部署新服务,连接mysql 8.0 测试连接 数据展示问题。后续稳定了,全部切换到mysql 8.0连接上面。
最后操作切换时候还是被sql_mode给坑了, mysql 8.0 默认sql_mode值是 “ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION”
ONLY_FULL_GROUP_BY 影响 group by sql 语句
STRICT_TRANS_TABLES 这个是开启严格模式,对数据严格验证,影响数据插入,如果某个字段没有设置默认值 就坑大了,导致数据新增插入不了
NO_ZERO_IN_DATE ,NO_ZERO_DATE 是在严格模式下面 对date 类型判断 新增插入数据,对插入时间格式 严格判断,重要一点 ,对update 语句也有如果 你where datetime=“0000-00-00 00:00:00” sql语句也会报错
记录一下 这次升级的坑