Facebook 分享迁移到 MySQL 8.0 的经验

来源: OSCHINA
2021-07-24 08:19:57

Facebook 在一篇博客中分享了该公司在某种程度上艰难的大规模跨越式迁移到 MySQL 8.0 版本的经验。此前,其一直使用的是 MySQL 5.6 版本。

MySQL 是由 Oracle 开发的开源数据库,为 Facebook 的一些最重要的工作负载提供支持。Facebook 方面称,MySQL 的每个新主要版本都需要其花费大量时间和精力来迁移工作负载。其中挑战包括有: 

  • 将其自定义功能移植到新版本
  • 确保复制在主要版本之间兼容
  • 最小化现有应用程序查询所需的更改
  • 修复阻止服务器支持其工作负载的性能回归

根据透露,Facebook 上次升级到 MySQL 5.6 花了一年多的时间;而此向 MySQL 8.0 的升级也花了好几年的时间。在 5.7 版本发布的时候,Facebook 仍在开发 5.6 版上的 LSM-Tree 存储引擎 MyRocks。鉴于在构建新存储引擎的同时升级到 5.7 会显着减缓 MyRocks 的进度,因此该团队选择继续使用 5.6 直到 MyRocks 完成。而 MySQL 8.0 则刚好是在 MyRocks 完成时发布的,所以 Facebook 选择升级以改进其存储引擎。

Facebook 指出,迁移到 8.0 明显比迁移到 5.6 要更困难。他们有 1700 个代码补丁要从其定制的 MySQL 5.6 分支迁移到 8.0。由于 Facebook 的 MySQL 新功能和不断添加到 5.6 代码库中的修复,使得这项工作变得非常复杂。

因为从 5.6 到 8.0 的升级完全跳过了 5.7,一些在 5.6 中活跃的 API 要么被弃用、要么被完全删除;这也就意味着任何使用旧 API 的应用程序都需要更新。且 Facebook 的一些功能也与 8.0 中的类似功能不向前兼容,需要弃用和向前迁移。

还有自定义代码文档参差不齐的问题。Facebook 称,它的大多数自定义代码都有良好的注释和文档。但其他的代码没有很好的文档,Facebook 需要挖掘旧的文件、帖子和代码注释来了解历史。

最终,Facebook 方面评估了 2300 多个补丁并将其中的 1500 个移植到了 MySQL 8.0。“我们已将许多 InnoDB 副本集转换为完全在 8.0 上运行。其余的大多数都处于迁移路径的不同阶段。现在我们的大部分自定义功能都已移植到 8.0,更新到 Oracle 的次要版本相对容易,我们计划跟上最新版本的步伐。”

“尽管我们在迁移的道路上遇到了种种障碍,但我们已经看到了运行8.0的好处。总的来说,新版本大大扩展了我们在 MySQL @ Facebook 上所能做的事情。”

更多详情可查看官方博客

展开阅读全文
点击加入讨论🔥(10) 发布并加入讨论🔥
本篇精彩评论
这种白盒迁移的方式估计就几家公司能做到吧,mysql8的源代码要完全吃透了才迁移,也真是牛
2021-07-24 13:28
4
举报
干脆把自己基于 MySQL 的改动提交给 Oracle,作为新 feature
2021-07-24 22:41
2
举报
所以FB才这么多年用来升级。等于是基于8.0,把数据库重新开发了一遍,加入大量FB专门需要的特性!这些特性原来都是在5.6上开发的,迁移到8.0花了好几年。
2021-07-29 13:42
1
举报
这玩笑真可笑,FB提交给MariDB都比这个合理一点。
2021-07-29 13:40
1
举报
因为自己改数据库底层,改了太多东西,这种定制版迁移,超麻烦。
2021-07-29 13:36
1
举报
10 评论
11 收藏
分享
返回顶部
顶部