升级到5.7版本以来MySQL 8.0版是一个热门话题很快接近生命的正式结束。MySQL 5.7 EOL定于2023年10月的结束。

如果你感觉自己还没有准备好面对升级,可以考虑post-EOL Percona的支持雷竞技下载官网。但这将是最糟糕的,如果你在匆忙进行升级。

  • 数据库服务停机时间长
  • 一些查询变得缓慢
  • 由于不兼容的应用程序停止工作
  • 数据丢失

这是会发生什么如果MySQL的主要升级到8.0,结果不是你所希望的。是的,它可以是严重的,考虑的主要升级作为一个重要的项目,不仅仅是日常维护任务!从我的经验作为一个支持工程师,我认为最常见的问题是升级后的查询性能。这一问题可能会使你的网站如果执行计划更改为差足够频繁的查询。

虽然有工具和方法的准备和使用之前要测试升级,通常,并不是所有的问题都可以预期。例如,虽然可以测试看工作量,<年代trong>write-related测试很困难事情。QA /过渡环境,往往不像生产100%,特别是对于规模,和惊喜是非常可能的。

因此,你会发现自己的处境的唯一快速救援MySQL升级失败后<年代trong>降级回到之前的版本。

如果它变得明显,你必须恢复后立即升级完成,解决方案应该是简单的——重新安装5.7版本包和恢复完整的备份之前升级(事实上,它是唯一的官方支持评级方法!)。

变得更加困难,如果恢复决策必须采取后,新的数据已经添加。MySQL 8.0不支持评级遭到下调,剩下更具挑战性,而不是官方支持的选择如果你不能丢弃所有的新写道,发生在8.0版。

让我们仔细看看下面的可能<年代trong>降级的选择:

  • 逻辑数据转储和恢复的8.0至5.7
  • 利用5.7副本
  • 恢复最后一次升级前备份和应用从binlogs 8.0上创建缺失的数据

一个逻辑转储/恢复降级

当逻辑下调官方支持MySQL 5.7到5.6:
https://dev.mysql.com/doc/refman/5.7/en/downgrade-paths.html

它不再是8.0到5.7的情况下:
https://dev.mysql.com/doc/refman/8.0/en/downgrading.html

整个文档的“降级MySQL”部分基本上是减少到一个声明,它不支持;因此,您可以试着在你自己的风险。

现在,第一个问题与逻辑转储恢复方法,有些完全预期是系统表。你不能加载一个MySQL系统数据库的转储MySQL 8.0和负载回MySQL 5.7。它将完全打破它!

所以,如果你遵循类似的程序的建议5.7 - > 5.6降级:
https://dev.mysql.com/doc/refman/5.7/en/downgrade-binary-package.html downgrade-procedure-logical

你会看到大量的进口这样的错误:

和目标5.7实例被打破,不再能够操作失踪的关键表。甚至通常的升级不会改正:

因此,您必须将用户表只有在得到升级前的最后一次备份的系统表。任何更改在系统表自8.0升级可能是一个问题,尽可能多的基本命令已经改变了。例如,你不能转储和恢复用户定义:

这意味着如果你想做好准备下调路径,你需要跟踪每个新系统属性变化,如用户、密码、事件、存储过程等,并保存相应的笔记,语法在5.7。如果你发现一个问题,你可能会投票支持https://jira.雷竞技下载官网percona.com/browse/pt - 1698

值得一提的是,逻辑转储可能会使用一个更迅速、更健壮的工具,如MySQL壳或mydumper。例如,util.dumpInstance ()从MySQL Shell,默认情况下,不备份系统表的完整备份。同时,util.loadDump ()如果需要可以排除额外的表。它会警告你不支持的行动:

强迫是可能的,尽管:

使用5.7作为备份复制品降级的道路

有副本似乎是一个很好的机会让一个在5.7版升级到MySQL 8.0后一段时间。然而,这并非官方支持:
https://dev.mysql.com/doc/refman/8.0/en/replication-compatibility.html

尽管复制从8.0源5.7副本可以使用一些努力:
https://www.雷竞技下载官网percona.com/blog/replicating-mysql-8-0-mysql-5-7/

有一个大问题,即使你避免新特性,MySQL 8.0字符集针对性超过5.7,其中一个是由违约!

Vs。

在使用utf8作为默认字符集的[客户]部分配置文件适用于定期MySQL客户端,它不会帮助其他应用程序使用MySQL驱动程序或从MySQL 8.0 C库:

https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html

一个简单sysbench兑8.0版本源将5.7副本,这样的:

二进制日志设置了相应的位置有以下:

不幸的是,我发现没有办法说服5.7 use utf8或整理现有的应用程序(比如utf8mb4_general_ci)除了改变它从内部应用程序本身。

这意味着复制只能工作如果您的应用程序使用一个司机/连接器库从MySQL 5.7或当你有控制包括组名称相应的行动。

所以,如果你有幸解决兼容性问题,您可能希望这样<年代trong>升级副本第一如本例中所示,图:

然后,将另一个5.7副本(或者创建一个新的)升级下一个:

最后,一旦8.0副本证明使用你的应用程序,以及复制不打破,源/初级升级到8.0:

注意,尽管这些截图了协调器,这是一个工具,使它非常容易复制拓扑变化,在这种情况下,我不得不手动移动5.7副本下8.0源代码,,再一次,这是不受支持的行动:

只要它适合你,上面的拓扑可以运行应用程序的源代码和复制品使用MySQL 8.0虽然有恢复/备份副本运行MySQL 5.7。在紧急情况下需要数据库下调,这将涉及最少的停机时间。

5.7下调恢复备份和应用新的binlogs (PITR)

这结合了一个简单的备份恢复步骤和另一个不是官方支持,应用二进制版本8.0到5.7版本产生的日志。潜在的问题非常类似于复制——一些信息写入二进制日志可能不能接受5.7实例:

允许应用这些binlog事件由255字符集和校对255的会议,我们可以试着将它们转换为最接近的类似那些存在于MySQL 5.7。

在MySQL 8.0中,罪魁祸首设置命令要做的:

对于MySQL 5.7,我们可以切换到这个:

因此,让我们修改二进制日志中的罪魁祸首行动态申请前:

这个工作对我来说简单sysbench OLTP工作负载,但不能保证它会为你的工作。有更不兼容的问题只是字符集的问题。

升级的建议

总结这篇文章,我强烈建议考虑为MySQL升级到8.0以下点:

<年代trong>做所有的推荐升级前的检查:

阅读upgrade-related帖子和文档:

尽可能多的测试,确保不会有需要恢复升级:

  • 如果未启用启用二进制日志
  • 做一个验证升级之前完整备份
  • 正如上面所讨论的测试评级选项

不要犹豫联系Percona专家帮忙准备和执行升级!雷竞技下载官网

一种更好的方式转移到MySQL 8.0

订阅
通知的
客人

0评论
内联反馈
查看所有评论