在6月20日举办的【墨天轮数据库沙龙-MySQL 5.7 停服影响与应对方案】中,甲骨文MySQL解决方案首席工程师徐轶韬分享了《从MySQL5.7升级到MySQL 8.0》主题演讲,本文为整理内容。

导读

2015年10月发布的MySQL5.7版本追加了JSON数据类型、多源复制等新功能,支持在线更改InnoDB缓冲、全文检索,并在运维方面支持syslog和DTrace。2023年10月将进入持续支持(Sustaining Support)阶段,不再发布小版本和新补丁。【墨天轮数据库沙龙】邀请到甲骨文MySQL解决方案首席工程师徐轶韬,为大家分享从MySQL5.7到MySQL8.0的升级步骤和注意事项等。

徐轶韬 甲骨文MySQL解决方案首席工程师

MySQL解决方案首席工程师。为中国金融、政府、航空运输等行业的MySQL用户提供相关产品的售前咨询,企业级产品服务介绍以及推广和普及MySQL数据库在社区的使用。公众号“MySQL解决方案工程师”运营者和内容作者。书籍《MySQL高可用解决方案——从主从复制到InnoDB Cluster架构》作者。

被Oracle收购后,MySQL一直遵循着其的开发规则,用户便能在立项阶段就基于产品周期匹配相应的版本。在标准支持服务阶段,社区版用户能够被定期进行版本维护,包括错误修复、补丁更新等;在延伸支持服务与持续支持服务阶段,产品只能提供有限的乃至停止服务,当超过9年后,不会进行任何的代码更改与持续支持服务。因此通常意义上来说,MySQL5.7停服意味着不会发布任何相关的补丁与代码。



图1 Oracle系列产品生命周期的3个阶段

Oracle公司提供的产品(MySQL)原则上是安全的。但是,有时会发现极其罕见的重大安全漏洞,甲骨文公司将迅速采取行动修复该漏洞,并最终发布安全信息,包括对漏洞的简要说明、由此带来的风险、避免方法和提供补丁的时间。但现实中存在着不同方面阻碍升级的因素。今天我分享的主题将从以下三个方面展开,升级前的准备、操作顺序(InnoDB, MyISAM)、升级带来的好处。



图2 不进行升级的风险

一、MySQL升级前的准备

如下图所示,在升级流程中首先确认不同版本的差异,包括关键字、参数与函数等等,完成后便进行MySQL升级与应用程序测试,最后需要制定生产环境上线计划,一系列操作的目的是降低并预防预想外的风险。



图3 升级实施的流程

1、版本间的差异确认

  • 通过手册确认版本间的差异

    • 确认手册中”Upgrading MySQL”的”Changes Affecting Upgrades to MySQL x.x”部分
    • 注意Known issue(已知问题)和Incompatible change(非兼容性变更)

MySQL 8.0 Reference Manual / 2.11.1.3 Changes in MySQL 8.0

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html

MySQL 5.7 Reference Manual / 2.11.1.2 Changes Affecting Upgrades to MySQL 5.7

https://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html

MySQL 5.6 Reference Manual / 2.11.1.2 Changes Affecting Upgrades to MySQL 5.6

https://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html

  • 通过发行一览确认差异

    • 每个版本的发行一览按照小版本变更进行记述
    • 理想情况下,确认版本间的全部发行一览

      例)从MySQL 5.6.29 到 MySQL 5.7.21 升级的情况 ⇒MySQL 5.6.30~5.6.39(最新版)、MySQL 5.7.0~5.7.21(最新版) 确认
    • 至少确认“Incompatible Change”记述的内容
    • 至少确认“Incompatible Change”记述的内容

MySQL 8.0 Release Notes

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/

MySQL 5.7 Release Notes

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/

MySQL 5.6 Release Notes

https://dev.mysql.com/doc/relnotes/mysql/5.6/en/



图4 发行一览例(Version 8.0)



图5 发行一览例(Incompatible Change)

  • 确认参数差异

    版本升级会对参数带来影响,包括新增、废止、降级使用等情况,此外还会出现更改默认值的参数

    通过手册和发行一览确认变更点

  • 确认mysqld

    此外还需要确认这个参数的差异,版本升级会对参数带来影响,包括新增fix,通常我们会对某些参数与不用的功能做降级处理。

    版本升级呢会对参数带来影响,包括新增一些废纸了,还有一些降级使用,通常我们会呃先对某些参数呢会一些不用的。不用的功能,先做一些降级处理。

  • 确认关键字、函数差

MySQL Server Version Reference / Keywords and Reserved Words:https://dev.mysql.com/doc/mysqld-version-reference/en/keywords.html

MySQL Server Version Reference / SQL Functions and Operators:https://dev.mysql.com/doc/mysqld-version-reference/en/opsfuncs.html

MySQL Server Version Reference / User-Defined Functions:

https://dev.mysql.com/doc/mysqld-version-reference/en/udfs.html



图6 (参考)MySQL8.0追加的关键字

2、MySQL的版本升级测试



图7 MySQL的版本升级测试流程

3、应用程序测试



图8 应用程序测试流程

4、制定生产系统上线计划

  • MySQL的升级测试、应用测试结束后需要制定生产系统上线计划
  • 基于测试时估算的时间、考虑发生问题时恢复的时间制定上线计划
  • 为发生意外事件做准备,设定是否执行切回的判断基准

二、操作顺序(InnoDB, MyISAM)

下图所示,MySQL基本的升级操作包含停止应用程序、备份数据、模块升级、数据库升级、升级后测试、开启应用程序等6个步骤。



图9 应用程序测试流程

  • 备份数据

    • 冷备或者mysqldump进行备份
    • 使用SQL转储方式进行升级时,需要使用mysqldump进行备份
  • 模块升级

    • 安装新版本的模块
    • 升级目标在其他主机时,单纯安装新版本即可
  • 数据库升级

    • 替换升级
    • 新环境迁移数据(逻辑升级)mysqldump
  • 替换升级

    • 实施方法:使用新的MySQL程序替换原有的MySQL程序、之后执行mysql_upgrade(8.0.16后无需执行)
  • 迁移数据至新环境

    • 当迁移数据至新的环境中,允许新旧环境同时存在,新环境的MySQL创建后,使用mysqldump加载数据,直接升级2个以上的大版本。这样的好处是,当数据迁移时,数据库的表等对象可以重新构建,节省一些磁盘空间。
    • 实施方法:在与旧环境不同的主机上创建新的MySQL数据库,将数据保存至新环境
  • 版本升级后的确认

    • 确认迁移工作的日志,是否存在错误和警告
    • 对比升级前后的对象:比较对象名称一览、比较表的行数等等…



图10 减少版本维护的时间

如果还有别的用户,这里推荐使用InnoDB,它作为默认引擎具有更高的依赖性与性能,能够平滑迁移至云服务。在我们的全部测试中,目前 InnoDB已经完全超过了myisam,特别是当并发力增大后,性能差异会非常显著。

MySQL5.7到MySQL8.0的升级顺序过程中,文件结构与功能不兼容的部分会根据引擎的特性去更改,更换成完全支持的事务,它的磁盘使用量大约是MySQL的1.5-3倍。

  • MyISAM→InnoDB更改时的注意事项





图11-12 MyISAM→InnoDB更改时的注意事项

  • 存储引擎的更改方法

    存储引擎的更改方法有四个,分别为克隆表、更改大表、扩大InnoDB 的buffer_pool容量、更改已有的存储引擎、禁用MyISAM引擎。

  • MERGE表的处理方法(MRG_MyISAM)

    MERGE表的处理方式是将相同结构的MyISAM表集合,每个表替换成InnoDB后使用UNION建多个mysql表,分别插入数据后合并所有的相关联结表,起到MERGE表的功能。





    图13-14 MERGE表的处理方法(MRG_MyISAM)

在5.7升级到8.0的过程中,MySQL 提供的升级检查器会提示3个返回值,分别为0:不存在问题;1:不存在致命错误,存在多个潜在问题;2:升级至8.0需要修改的问题。在升级过程中,会做相关方面的内容检查。

  • (参考)MySQL 8.0功能相关文档及工具

MySQL 8.0发行一览

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/

MySQL 8.0新功能列表(400项目以上)

https://mysqlserverteam.com/the-complete-list-of-new-features-in-mysql-8-0/

MySQL 8.0的主要变更点

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html

MySQL 8.0追加/变更/删除的参数和变量

https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html

三、升级带来的好处



图15 MySQL版本升级可以降低发生问题的风险

未来 MySQL 将发布 2 个版本,长期支持版和创新版。长期支持版的目标为稳定性,仅修复 BUG 并发布安全补丁,该版本向后兼容,预计每两年发布一次,支持的生命周期为 5 年标准支持 +3 年的延伸支持。创新版将会每季度发布创新功能,支持期间为短期支持,该版本与 LTS 版本可以快速迁移。

未来版本的发布计划

以上就是我今天的分享,谢谢大家!

更多精彩内容,欢迎大家观看现场视频回放与会议资料

视频回放:https://www.modb.pro/video/8210

会议资料:https://www.modb.pro/doc/110172


墨天轮技术社区即将举办【ACDU线上分享会 | 盘点Oracle 23c那些"炫酷"的功能】,邀请到了云和恩墨西区服务部总经理、Oracle ACE李真旭(Roger),为大家就Oracle版本升级、性能优化、故障诊断、以及23C新特性等方面进行详细解读,以期为各位DBA及技术开发者带来Oracle的进阶指南。

活动详情及报名可查看:https://www.modb.pro/event/817,直播间将送出精美周边,欢迎大家积极参与!另外可添加墨天轮小助手(VX:modb666)获取更多活动资讯和技术干货。

技术分享 | 徐轶韬:从MySQL5.7升级到MySQL 8.0的更多相关文章

  1. mysql5.6升级及mysql无密码登录

    mysql5.6升级 mysql5.6的升级可以分为以下几个步骤: 安全关闭正在运行的MySQL实例 把/usr/local/mysql 的连接由MySQL5.6更改为MySQL5.7 启动MySQL ...

  2. MySQL5.7升级版本到8.0

    升级二进制包安装的MySQL In-Place Upgrade(替代升级) 替代升级涉及到shutdown down旧版本的MySQL,用新版本的包替代旧版本的二进制包,用存在的数据文件目录重启MyS ...

  3. Zabbix技术分享——docker组件编译使用教程

    docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,它可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,还可以实现 ...

  4. fir.im Weekly - 新开发时代,需要什么样的技术分享

    "2016年,当我们迎来了如Xcode 8.Swift 3.SiriKit.Android N.Android Instant Apps.React Native等诸多移动开发技术.开发工具 ...

  5. 【转发】网易邮箱前端技术分享之javascript编码规范

    网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...

  6. CDN技术分享

    CDN技术分享目录 网络应用服务发展 CDN技术 1.CDN是什么?为什么我们需要它?(简介) 2.CDN能做什么?(作用) 3.CDN是如何工作?(原理) 4.CDN有那些具体应用?(应用) 我们项 ...

  7. 【转】apache kafka技术分享系列(目录索引)

    转自:  http://blog.csdn.net/lizhitao/article/details/39499283   估计大神会不定期更新,所以还是访问这个链接看最新的目录list比较好 apa ...

  8. 感知开源的力量-APICloud Studio开源技术分享会

    2014.9.15 中国领先的“云端一体”移动应用云服务提供商APICloud正式发布2015.9.15,APICloud上线一周年,迎来第一个生日这一天,APICloud 举办APICloud St ...

  9. HTML5学堂 全新的HTML5/前端技术分享平台

    HTML5学堂 全新的HTML5/前端技术分享平台 HTML5学堂是做什么的? HTML5学堂~http://www.h5course.com~由多名热爱H5的讲师们组成的一个组织.致力于构建一个前端 ...

  10. 内部技术分享的 PPT

    本文的基础是搞了一次内部的技术分享,在此也分享一下本次的PPT的一些内容.先列一下大概内容吧. EF-Code First API(WCF.WebAPI) Xaml MVVM AOP Xamarin. ...

随机推荐

  1. ceph 001 存储类型 传统存储与分布式存储 分布式文件系统 集群与分布式

    ceph 存储类型 块存储:裸磁盘 未被格式化的磁盘 DAS(直连存储,usb,硬盘插到电脑):scsi接口 接口数量有限 传输距离有限 SAN(存储区域网络):ip-san 网络(iscsi) 以太 ...

  2. 7、SpringBoot2之整合事务及AOP

    本文在SpringBoot2之整合Mybatis的基础上进行 7.1.整合事务 7.1.1.mapper接口 int deleteEmployeeById(int id); 7.1.2.mapper映 ...

  3. 【ECharts】03 样式

    ECharts4 开始,除了默认主题外,内置了两套主题,分别为 light 和 dark. 设置方式: var chart = echarts.init(dom, 'light'); var char ...

  4. 制约国产深度学习框架发展的根本原因 —— AI芯片的无法自主生产或量产

    秉着没事就胡言乱语的宗旨,这里在接着胡说八道一下. 国外的深度学习框架如TensorFlow.pytorch.Jax打的如火如荼,按照以往惯例我们是不应该去做自主研发软件系统的,毕竟硬件不在掌握之下, ...

  5. JUC高并发编程(二)之多线程下载支付宝对账文件

    1.背景 在实际开发中,经常会遇到支付需求,当然就会有支付对账的需求.... 2.项目结构 3.代码 3.1.线程池配置对象 @Configuration @EnableAsync public cl ...

  6. Java类和对象 小白版

    一.类 一.类的定义 具有同种属性的对象称为类.定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化. 类的三种常见成员:属性.方法.构造器 二.类的编写 1.类名的定义: 2.类属性(特 ...

  7. 高性能无锁队列 Disruptor 核心原理分析及其在i主题业务中的应用

    作者:来自 vivo 互联网服务器团队- Li Wanghong 本文首先介绍了 Disruptor 高性能内存队列的基本概念.使用 Demo.高性能原理及源码分析,最后通过两个例子介绍了 Disru ...

  8. Linux入门的基础知识点,有这篇就够了(持续更新)

    很多粉丝给一口君留言,想要学习Linux资料,其实关注一口君的公众号,后台回复 1024 ,就有很多非常不错的电子书,但是有一个问题,很多粉丝是初学者,而这一大堆电子书,估计随便一本,还没看完就基本上 ...

  9. Ubuntu20.04安装CUDA和CUDNN

    CUDA是GPU深度学习的运行库,那么cuDNN就是训练加速工具,两者要相互配合使用,所以一般机器学习需要训练引擎(tensorflow-gpu) + CUDA + cuDNN使用.想不安装cuDNN ...

  10. wget 提示 "无法验证 xxxx.xxx 的由 “xxx” 颁发的证书: 无法本地校验颁发者的权限。"

    有一天在使用 wget 下载文件时,出现了无法验证证书的提示: $ wget https://github.com/zayronxio/Mkos-Big-Sur/releases/download/0 ...