乐趣区

关于数据库:技术分享-徐轶韬从MySQL57升级到MySQL-80

在 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


  • 浏览原文:https://www.modb.pro/db/655631
  • 查看本次沙龙更多 TiDB、腾讯云数据库及万里开源数据库主题 PPT 及回顾:

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

退出移动版