5.7停服倒计时!关于MySQL升级到8.0版本的一些经验( 四 )


解决方案:跨版本升级中的SQL异常 , 可以通过提前交付只读实例来进行预先验证,并且抓取原库的慢日志在8.0数据库中进行回放验证
4)MySQL8.0 新增关键字(如rank),可能导致查询、写入失败
mysql> select rank from activity_public_log limit 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from activity_public_log limit 1' at line 1
解决方案:改写成 `rank`或者调整字段名
mysql> select `rank` from activity_public_log limit 1;
查询方式:
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME from information_schema.COLUMNS where COLUMN_NAME="rank";
5)对于load权限的确认
部分业务具有导入数据的权限,在默认模板中参数secure_file_priv和local_infile是关闭的,需要和业务侧确认是否有该类需求,或者从定时任务中识别
6)存储过程权限检查
部分业务中存在存储过程时,对于存储过程的权限粒度 invoker和definer差异可能导致迁移后业务调用失败,需要在迁移中进行检查
(五)制定资源申请和回收流程
有了前面的流程支持,整个过程基本可以跑起来了,还有一个风险则是采用资源平替的方案,也就意味着今天数据库实例是业务A的主库,完成升级之后我们会让系统的同事重新格式化后交付给我们,很可能明天就变成业务B的从库了,所以资源是以资源池的形式在反复利用,对于如何申请资源和下线资源就是关键,我们制定的流程是需要至少3次审核才可以下线 , 而且下线的过程中还需要有一定的观察期窗口 。
为此我们也指定了专人负责制度,即最终的下线操作只能由固定的一个人来操作,他需要对下线操作做最后的审核,并且负责 。
三、版本升级问题总结
具体实施的过程还是相对顺利的,为此我们也储备了一些标准化能力,比如平台化搭建跨版本从库的服务,保证每个人交付的质量是基本一致的 。
所以结果整体上是预期中的 , 当然也发现了一些潜在问题,通过梳理和总结 , 也在其他业务方向能够参考借鉴,提高了整体服务升级的稳定性和专业性 。

5.7停服倒计时!关于MySQL升级到8.0版本的一些经验

文章插图
版本升级的事情做完了,也盘点出了一些新的收获:
(一)业务便于接入:通过大规模升级的过程对于多语言体系的兼容性支持做到了心中有数;
(二)数据库子版本平滑升级:后续的子版本升级演变为在线升级模式,就不需要研发做额外的沟通和测试;
(三)操作系统无感升级:操作系统升级可以演变为平滑升级模式,centos 7后续的版本选型和支持都可以做一些调研测试;
(四)资源治理:通过升级也发现有一些服务资源使用率不足需要降配,后续可以开展容量治理 。
四、小结
MySQL版本升级工作,从2022年上旬开始规划到生态完善实施了近1年,得到了多个中心研发团队的大力支持和理解 。MySQL数据库也从原本的7个技术栈收缩为2个,挑战和难度在落地时才发现比预期的要复杂不少 , 为了保证业务的稳定性和研发工作的侵入度最低,DBA团队也制定了完整的数据升级流程和业务切换方案,并对业务异常的回退进行了全流程准备,整个过程零故障 。
后续计划在SQL云数据库、SQL高可用体系,SQL分布式架构体系和SQL资源标准化四个方面持续发展,并制定相应的建设计划 。
(一)SQL资源标准化:MySQL 8.0作为基线版本 , 为后续的运维管理工作提供统一、标准的基础服务支持,并对外提供一致性系统服务,后续提供平滑升级的平台化方案;同时做一些资源治理,对一些使用率不足的业务可以在线降配 。
(二)SQL分布式架构体系演进:随着水平扩展需求、信创、分布式事务方案的调研和业务落地演进,未来可能会基于OceanBase等国产化数据库进行对比分析,适时引入;
(三)SQL高可用体系:SQL高可用体系对于标准版主从集群会基于MySQL 8.0版本作为基线,对于拓扑发现,数据管理模式会基于新的运维命令和使用模式;
(四)SQL云数据库服务支持:基于MySQL 8.0的服务体系会在功能和性能上面提供更加丰富 , 高性能的数据存储支持,如对于JSON的格式解析和查询等,对于SQL查询优化的优化器支持等 。

【5.7停服倒计时!关于MySQL升级到8.0版本的一些经验】


推荐阅读