据DB-Engines称,MySQL是世界上最受欢迎的开源数据库,十多年来一直排名第二。MySQL推动了LAMP堆栈的崛起,并多年来一直是开发人员和数据库管理员的可靠伙伴。2023年10月,版本5.7将达到生命周期终止状态,这意味着这个版本将不再接收更新或安全补丁。
这很重要,因为在四个月的时间里,根据使用Percona Monitoring and Management进行数据库管理任务并选择与我们分享遥测数据的用户所提供的数据,目前有超过一半正在运行MySQL服务器的人使用的是v5.7。由于这是数据库安装的典型样本,这意味着有很多数据库服务器距离生命周期结束只有四个月的时间。
为了准备迁移数据库,你需要了解以下几个方面的成本和益处:
迁移至MySQL 8.0
首先,你应该了解从MySQL 5.7迁移到MySQL 8.0需要做哪些工作。MySQL 8.0已经在市场上推出了很长时间,所以它是非常稳定的选择,但与以前的版本相比,有一些重大变化。
一个主要的变化是MySQL 8.0中所支持的SQL(结构化查询语言)增强,使得开发人员和数据库管理员更容易支持查询。例如,如果你在编写子查询时遇到问题,你会喜欢支持可派生联接和公共表表达式(CTEs)的新的横向-derived join。还有一个新的交集子句,帮助处理集合。
MySQL 8.0还支持新的命令,这些命令在MySQL 5.7中没有包含。例如,EXPLAIN ANALYZE可以帮助进行查询调优。EXPLAIN命令将给出服务器对查询性能的估计分析。添加ANALYZE将执行查询,返回的数字报告查询性能的实际表现。这提供了更深入的了解,帮助找到改进的方法。此外,INVISIBLE INDEX命令可帮助你测试索引的效率,而不会在进行删除操作后尝试灾难性地重建。
除了这些变化,更新的默认字符集UTF8MB4提供Unicode版本9.0支持,意味着你可以支持国际字符。如果你必须支持全球运营,这将非常有用。
迁移到MySQL 8.0是一条单向路,因此你需要确定你的应用程序和数据库是否支持迁移。一个有效的检查方式是使用MySQL Shell的util.checkForServerUpgrade() 实用程序,该工具执行21个不同的测试,以查找可能在迁移过程中遇到的任何潜在问题。这包括查找任何与新保留关键字冲突的表,使用非本机分区引擎的分区表,环形目录引用表空间数据文件路径以及已经删除的函数等。同样,该实用程序还将查找已被删除或更改为新默认值的系统变量的问题。
根据你现有的MySQL实现,你可能只需要进行一些小的更改就可以准备就绪。但是,如果你的应用程序返回多个问题和更新,那么你需要做更多的工作。
考虑DBaaS和MySQL的替代方案
除了检查系统是否存在潜在的迁移问题外,您还应该总体调查您的选项。例如,MySQL是否仍然是您和团队的最佳数据库,还是您应该考虑其他选择?如果您必须在应用程序中投入大量精力来使其达到标准,那么您是否应该将这种努力投入到迁移到不同平台上?同样,您是否会继续以同样的方式运行数据库基础架构,还是应该采用不同的方法,比如数据库即服务(DBaaS)?
您可以做出三种选择。第一种选择是什么都不做。您可能会认为将应用程序迁移到新的数据库版本的成本太高,选择继续运行已经不支持的数据库版本。这并不理想,但在某些情况下可能是最佳选择。我与一家公司合作时遇到了类似情况,他们决定保持他们的系统不变,因为这个应用程序没有直接连接到公共互联网,并且在两年内需要进行刷新。
将应用程序迁移所需的工作量比缓解潜在的安全风险和购买扩展支持的成本更高,因此他们决定继续使用当前版本的MySQL。这是一个积极的决策,具有真实的业务案例和风险管理方法,而不仅是低头忽视问题。
第二个选项是进行迁移,但更改您托管数据库的位置。例如,与MySQL兼容的云服务和托管提供商可以代表您管理这些机器,而无需运行自己的基础架构。DBaaS选项可以减轻一些基础架构管理方面的头痛,但它们本身也必须得到管理和更新。
第三个选项是迁移到其他数据库。当您的应用程序和数据库安装需要更新且工作量很大时,可以将任何努力用于移动到不同的数据库。如果您想将系统作为整体移动,这可能是有用的,但还需要额外的规划,以查看您的业务逻辑以及基础架构。
MySQL的最常见的外部迁移选项是PostgreSQL,因为它是一个类似流行的开源数据库,并拥有一个庞大的社区。PostgreSQL本身最近进行了更新,以支持在Microsoft SQL Server、Oracle数据库和MySQL中广泛使用的SQL命令MERGE。这是在PostgreSQL 15中添加的,以使迁移到PostgreSQL更加容易,而无需进行重大的重写。这种迁移可能需要进行一些重写,但如果您已经不得不进行更改以迁移到MySQL 8.0,那么为什么不进行一次转变呢?
MERGE迁移还支持使用商业版或DBaaS版的PostgreSQL。由于其灵活的开源许可证,有许多基于PostgreSQL的数据库服务,因此许多公司都宣扬他们的能力来支持此项工作。然而,值得注意的是,是否有任何这些选项完全兼容,并真正支持开源的PostgreSQL,而不是成为他们自己特定变体。这可能就像MySQL迁移一样是一个单向的街道,但一旦你进行了迁移,你的选择就更少了。
从MySQL 5.7迁移到MySQL 8.0或更高版本将是许多开发人员和DBA在未来几个月必须支持的任务。首先要进行规划和了解你的选择。通过查看你现有的应用程序,需要投入多少工作,以及你未来希望或需要从应用程序基础架构中获得什么,你可以评估前进的不同路径的成本和收益。
在原地对MySQL进行更新、在新平台上进行全面迁移,甚至在原地停留,这些都是你可以考虑的选项。然而,与其坐视不管或逃避问题,不如提前思考,利用好你的机会。