MySQL 8.4 LTS 版本

2024-05-09 15:19:51 浏览数 (1)

前言

Oracle 前几天发布了 MySQL 8.4 版本(LTS), 该版本是创新版的第一个长期支持版本。详细规划,请移步 技术译文 | 一文了解 MySQL 全新版本模型

关于 MySQL 的版本发布规划

Oracle MySQL 官方开发团队推出的新版本将过渡到新的 MySQL 版本模型。MySQL 8.1.0 是第一个创新版本,8.0.34 将只进行错误修复,直到 8.0 生命周期结束(EOL,定于 2026 年 4 月)。

MySQL 8.x 版本最终将成为 LTS,这将为用户从 8.0.x 迁移到 8.x LTS 版本提供充足的时间。

对我们的影响 ,总结起来就是:
  1. 如果用户想要 MySQL 数据库的最新功能、改进和bug fix,请使用创新版本(例如 8.1.x、8.2.x、8.3.x 等)。
  2. 如果用户 MySQL 只需要错误修复,请使用 8.0.x 版本(例如 8.0.35、8.0.36、8.0.37 等)。
  3. 如果用户使用的是国内云厂商的RDS MySQL 数据库服务,具体版本支持计划请参考各个厂商的相关公告。

言归正传,聊聊 8.4 的技术特性。

8.4 功能变更

1 MySQL 密码认证

认证插件:默认情况下, mysql_native_password 插件被禁用, 如果需要启用该插件,需要在启动时指定 --mysql-native-password=ON 或者在my.cnf 文件里面配置 mysql_native_password=ON

2 InnoDB 相关默认参数变化

重点说3个吧

innodb_io_capacity: 默认值改成了10000,之前是200。目前绝大部分磁盘都是 SSD ,200 这个值的确少了点。

innodb_buffer_pool_instances: 调整取值的算法,取min(innodb_buffer_pool_size / innodb_buffer_pool_chunk_size *1/2, 逻辑 CPU * 1/4)

innodb_adaptive_hash_index: 默认改为 OFF ,之前是ON ,AHI 是 DDL 不稳定因素之一 ,这次终于默认关闭了。开启也带来不了多少性能提升。

其他的 各位读者朋友可以看官方文档或者下面的截图:

3 复制相关

主从复制参数 SOURCE_RETRY_COUNT 默认值变更为 10,也即主从复制关系异常时,从库尝试连接主库10次。每次间隔的时间由 SOURCE_CONNECT_RETRY 决定,默认 60s 。

在 MySQL 的主从复制配置中,SOURCE_RETRY_COUNTSOURCE_CONNECT_RETRY 决定复制过程中从服务器尝试重新连接到主服务器的行为。

SOURCE_RETRY_COUNT:从服务器在复制过程中遇到错误(如网络问题或访问冲突)时,尝试重新访问主库的重试次数。默认情况下,如果从服务器在读取二进制日志文件时遇到错误,它会停止复制并等待下一次 poll 操作(通常是几秒到几十秒,取决于 REPLICATE_RECONNECT 参数的设置)。如果设置了 SOURCE_RETRY_COUNT,从服务器将在这个次数范围内尝试重新读取错误发生的位置,而不是立即停止复制。

SOURCE_CONNECT_RETRY:从服务器尝试重新连接到主服务器的间隔时间。当从服务器由于某些原因与主服务器的连接断开时(比如主服务器重启或网络中断),从服务器会等待 SOURCE_CONNECT_RETRY 指定的秒数后尝试重新建立连接。如果连接失败,从服务器将继续在每隔 SOURCE_CONNECT_RETRY 秒尝试重连,直到成功为止。

之前没有注意改参数,这次补习一下。

4 master/slave 关键字变化

前几年为了政治正确官方决定去掉关键字 masterslave ,现在终于在 8.4 版本里面去掉了,使用者需要做如下替换:

代码语言:javascript复制
master  ---> source
slave   ---> replica

这里要辛苦运维开发同学做版本兼容。凡是涉及 这两个词的状态参数, 命令语句 都要修改。不过 8.4 版本应用到是生产版本还有好多年,习惯命令行的朋友还不用着急修改。

5 SQL_AFTER_GTIDS 兼容 MTA.

以前,当复制启用 并行复制 MTA功能并且用户尝试 SQL_AFTER_GTIDS,"START REPLICA" 会触发警告 ER_MTS_FEATURE_IS_NOT_SUPPORTED,并且复制会被切换到单线程模式。8.4 版本 ,"START REPLICA" 语句的 "SQL_AFTER_GTIDS" 选项兼容 MTA 。

6 组复制 参数相关

group_replication_consistency 系统变量的默认值从EVENTUAL 改为 BEFORE_ON_PRIMARY_FAILOVER

group_replication_exit_state_action 系统变量的默认值改为 OFFLINE_MODE

group_replication_set_as_primary() 函数在选择新主成员时,将等待正在进行的DDL结束。

7 Clone plugin

克隆功能对版本的要求进一步放宽,允许在同一大版本的不同小版本之间进行克隆。换句话说,只有主要版本号和次要版本号必须匹配,而以前点版本号也必须匹配。

例如,克隆功能现在允许将 8.4.0 克隆到 8.4.14 以及将 8.0.51 克隆到 8.0.37。对于 8.0,之前的限制仍然适用于 8.0.37 之前的版本,因此不允许将 8.0.36 等克隆到 8.0.42,反之亦然。(WL#15989)

8 直方图自动更新功能

MySQL 8.4.0 支持自动更新直方图。当为给定的直方图启用此功能时,你可以通过为 ANALYZE TABLE 语句包含 AUTO UPDATE 选项来启用此功能。每当对指定的表运行 ANALYZE TABLE 时,它会被更新。

可以使用 MANUAL UPDATE 选项禁用自动更新某个表的直方图功能。如果没有指定这两个选项中的任何一个,则默认为 MANUAL UPDATE(无自动更新)。

9 Thread pool plugin 连接信息
  1. 增加 连接池相关的表 tp_connections 记录每个连接池的元数据。
  2. tp_thread_statetp_thread_group_state 增加了更细粒度的字段显示 连接池的状态。
10 废弃 expire_logs_days

废弃参数 expire_logs_days 并使用 binlog_expire_logs_seconds 代替。

11 过时的复制选项和变量

在 MySQL 早期版本中,一些与MySQL复制相关的选项和变量已被弃用,并且已从MySQL 8.4中移除。现在尝试使用这些选项和变量将导致服务器抛出语法错误。这些选项和变量列举如下:

--slave-rows-search-algorithms:当应用更新或删除操作寻找表行时,复制应用程序使用的算法现在始终是HASH_SCAN,INDEX_SCAN,用户不再能够配置此项。

--log_bin_use_v1_events:这允许运行MySQL 5.7及更新版本的源服务器复制到早期版本的MySQL,这些早期版本的MySQL不再被支持或维护。

--relay-log-info-file, --relay-log-info-repository, --master-info-file, --master-info-repository:使用文件作为sql 应用线程的元数据的方式已被支持 crash-safe 的表所取代。

官方文档

  1. https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/index.html
  2. https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/mysql-nutshell.html

0 人点赞