根据支持 LTS(长期支持)发布的新发布模型,给定的 MySQL 服务器将分为以下两类:

要么是 LTS 版本。

要么是创新版本。

本博客文章将解释如何确定给定的 MySQL 服务器是否为 LTS 版本。


定义发布类型

MySQL 服务器源代码存储库中包含一个名为 MYSQL_VERSION 的文件,用于定义当前发布的版本号。我们已向此文件添加了另一个字段,名为 MYSQL_VERSION_MATURITY。以下是一个示例文件,用于描述 8.4.1 的更新版本,这是一个 LTS 版本:

MYSQL_VERSION_MAJOR=8

MYSQL_VERSION_MINOR=4

MYSQL_VERSION_PATCH=1

MYSQL_VERSION_EXTRA=-u1

MYSQL_VERSION_MATURITY="LTS"


这个新字段由 cmake 识别,它定义了一个变量,可以在后续的 cmake 处理中使用。Cmake 还添加了一个定义,MySQL 服务器源代码可以识别。在上面的示例中,我们定义了字段 MYSQL_VERSION_EXTRA 的值为 "-u1"。这仅在云构建中使用,表示当前发布是 8.4.0 的更新版本。通常,对于本地发布,该字段为空。


嵌入 LTS 发布类型元数据

作为 cmake 处理的一部分,会生成一个名为 INFO_SRC 的文件,其中包含有关源代码的元数据。该文件已经是打包和安装过程的一部分,并且可以在安装服务器后在 MySQL 服务器主机上读取。例如,对于 RPM 软件包,该文件位于:/usr/share/doc/mysql-cloud-server-8.4.0/INFO_SRC。因此,可以基于服务器安装来确定发布类型,甚至无需启动 MySQL 服务器。以下是文件 INFO_SRC 的示例内容:

commit: 0fef7649b3baf3601b0b2574585a381032d6f73b

date: 2023-10-16 11:58:04 +0200

created at: 2023-10-26 11:33:21Z

branch: mysql-trunk

MySQL source 8.4.1-u1

MySQL release maturity LTS

...

MySQL 服务器升级历史

过去,MySQL 服务器通常会生成一个名为 mysql_upgrade_info 的文件,其中包含上次完成的 MySQL 服务器升级的版本号。该文件已被弃用,并已被移除。相反,现在我们生成一个名为 mysql_upgrade_history 的文件。该文件在服务器第一次初始化时生成。然后,对于每次成功的升级,我们将向该文件添加一个条目,因此它将包含已访问包含该文件的数据目录的 MySQL 服务器版本的追踪记录。该文件包含升级的时间戳、完整版本字符串和发布成熟度类型,以 JSON 数组的形式结构化。请注意,完整版本字符串将包括来自文件 MYSQL_VERSION 的 MYSQL_VERSION_EXTRA 字段,因此版本字符串可能不仅包含版本号。文件中的第一个条目(即服务器初始化时)也标记为 "initialize": true。以下是文件 mysql_upgrade_history 的示例内容:

{

  "file_format": "1",

  "upgrade_history": [

    {

      "date": "2024-05-21T01:02:03Z",

      "version": "8.4.1-u1",

      "maturity": "LTS",

      "initialize": true

    },

    {

      "date": "2023-05-22T01:02:03Z",

      "version": "9.0.0",

      "maturity": "INNOVATION"

    }

  ]

}

结论和进一步工作

INFO_SRC 和 mysql_upgrade_history 文件均可在无需启动 MySQL 服务器的情况下进行读取;因此,可以以非侵入性的方式确定发布类型。然而,通过针对正在运行的服务器执行 SQL 语句来确定发布类型也可能很有用。支持此功能的一种可能性是添加一个信息模式视图或状态变量,其中包含与 mysql_upgrade_history 文件相同的信息。尽管目前尚不支持通过 SQL 访问这些信息,但在以后的版本中可能值得考虑。


转载翻译自MySQL官方博客:https://blogs.oracle.com/mysql/post/determine-whether-lts-release-or-not