前言
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 版本提供充足的时间。
对我们的影响 ,总结起来就是:
- 如果用户想要 MySQL 数据库的最新功能、改进和bug fix,请使用创新版本(例如 8.1.x、8.2.x、8.3.x 等)。
- 如果用户 MySQL 只需要错误修复,请使用 8.0.x 版本(例如 8.0.35、8.0.36、8.0.37 等)。
- 如果用户使用的是国内云厂商的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_COUNT
和 SOURCE_CONNECT_RETRY
决定复制过程中从服务器尝试重新连接到主服务器的行为。
SOURCE_RETRY_COUNT
:从服务器在复制过程中遇到错误(如网络问题或访问冲突)时,尝试重新访问主库的重试次数。默认情况下,如果从服务器在读取二进制日志文件时遇到错误,它会停止复制并等待下一次 poll 操作(通常是几秒到几十秒,取决于 REPLICATE_RECONNECT 参数的设置)。如果设置了 SOURCE_RETRY_COUNT
,从服务器将在这个次数范围内尝试重新读取错误发生的位置,而不是立即停止复制。
SOURCE_CONNECT_RETRY
:从服务器尝试重新连接到主服务器的间隔时间。当从服务器由于某些原因与主服务器的连接断开时(比如主服务器重启或网络中断),从服务器会等待 SOURCE_CONNECT_RETRY
指定的秒数后尝试重新建立连接。如果连接失败,从服务器将继续在每隔 SOURCE_CONNECT_RETRY
秒尝试重连,直到成功为止。
之前没有注意改参数,这次补习一下。
4 master/slave 关键字变化
前几年为了政治正确官方决定去掉关键字 master ,slave ,现在终于在 8.4 版本里面去掉了,使用者需要做如下替换:
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 连接信息
- 增加 连接池相关的表
tp_connections
记录每个连接池的元数据。 tp_thread_state
,tp_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 的表所取代。
官方文档
- https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/index.html
- https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/mysql-nutshell.html