MySQL 8.4 变化

MySQL 8.0 由于在 2026 年 4 月停止维护(8.0.46 ), 这导致一些云厂商的 MySQL 服务可能面临强制升级的风险,同样本地部署使用MySQL,的同样应该考虑后续的升级计划,因为和oracle DB一样进入Extended Support 期的收费方式将发生变化。

MySQL major versionCommunity end of lifeRDS end of standard support dateRDS end of Extended Support date
MySQL 8.4April 202931 July 202931 July 2032
MySQL 8.0April 202631 July 202631 July 2029
MySQL 5.7+October 202329 February 202428 February 2027
自 2023 年 7 月起,MySQL 启用了新的版本控制模型,您可以根据应用程序和环境需求,灵活选择两种发布路径:创新版或长期支持 (LTS)/错误修复版。如果您需要使用最新功能和改进,并乐于掌握最新技术,MySQL 创新版本通道是您的最佳选择。LTS/Bugfix 版本仅包含必要的修复,因此如果您的环境需要既定的数据库软件行为,则 LTS/Bugfix 版本是更好的选择。

LTS/Bugfix 版本

LTS/Bugfix 轨道上的每个 MySQL 版本在其 GA 日期后大约一年被弃用,并在弃用日期后大约三个月停止提供。

创新版本创新方案中的每个 MySQL 版本均按以下规则弃用:

  • 2025 年 11 月之前发布的版本:在正式发布日期后约三个月被弃用,并在弃用日期后约三个月停止提供。
  • 2025 年 11 月或之后发布的版本:在正式发布日期后约五个月弃用,并在弃用日期后约一个月停止提供。

更多参考 https://docs.oracle.com/en-us/iaas/mysql-database/doc/mysql-server-versions.html

 下面记录MySQL 8.0 到 MySQL 8.4 之间的主要变化

权限变化

从 MySQL 8.4.0 开始,已弃用的身份 mysql_native_password验证插件不再默认启用。要启用它,请使用 `–enable-password-plugin` 命令启动服务器 --mysql-native-password=ON (MySQL 8.4.0 新增),或者 mysql_native_password=ON在 [mysqld]MySQL 配置文件的 `configure` 部分中添加相应的配置(MySQL 8.4.0 新增)。, 如果业务需要, 可以显示的指定选项:

mysql_native_password=ON

新增了SET_ANY_DEFINER 定义对象创建权限和 ALLOW_NONEXISTENT_DEFINER 孤立对象保护权限。这些权限与已弃用的权限共存 SET_USER_IDSET_USER_ID 权限。  该SET_USER_ID权限已在 MySQL 8.2.0 中弃用并移除。 GRANT现在在语句中使用该权限会导致语法错误。

数据类型

在 MySQL 8.0 中, 已弃用AUTO_INCREMENTFLOAT和 语句DOUBLE中 使用修饰符的列;在 MySQL 8.4 中,完全移除了对它的支持,自增列(AUTO_INCREMENT) 使用 FLOAT 或 DOUBLE 类型会直接报错.

分区

 在 MySQL 8.0 中,分区表的分区键允许使用带有索引前缀的列,并且在创建、修改或升级分区表时会发出警告,除此之外不会产生其他影响。现在,分区表中不再允许使用此类列,在分区键中使用任何此类列都会导致执行 ` CREATE TABLEOR` ALTER TABLE语句时被拒绝并报错。

外键变化

8.0 中外键仅允许关联父表的索引(没有唯一性要求), 但在 8.4 中, 除了仅关联父表的索引, 还必须唯一. 不过唯一性可以由变量 restrict_fk_on_non_standard_key 控制.

命令行

EXPLAIN FOR SCHEMA。 FOR SCHEMA语句中 添加了一个选项EXPLAIN。语法如下所示,其中 stmt是一个可解释的语句:

EXPLAIN [options] FOR SCHEMA schema_name stmt

这将使其stmt像在指定的模式中一样运行。

FOR DATABASE也可作为同义词使用。

InnoDB 变化

主要参数变量选项变化

参数及选项说明
innodb_buffer_pool_in_core_file默认改为了 OFF, 避免 buffer pool 过大时, 产生特别大的 core 文件.
innodb_adaptive_hash_index默认改为 OFF. 因为该特性并非适用于所有场景, 可以按需开启.
innodb_doublewrite_pages默认改为 128, 可以是 1 ~ 512 之间的值. 旧版默认值依赖 innodb_write_io_threads 变量.
innodb_flush_method默认改为 O_DIRECT(如果系统支持), 以前为 fsync.
innodb_io_capacity默认值从 200 改到了 10000. 更适配现代化的 SSD/RAID 硬件.
innodb_log_buffer_sizebuffer size 从默认的 16M 改为了 64M, 用来降低频繁写操作带来的性能影响.
innodb_purge_threads默认值改为了自适应系统的逻辑 CPU核数, 核数小于 16 的时候为 1, 否则为 4
innodb_change_buffering默认值从 all 改为了 none.
innodb_numa_interleave默认值改为了 ON.
innodb_page_cleaners默认值从 4 改为等于 innodb_buffer_pool_instances.
innodb_read_io_threads默认值从 4 改为可用核数的一半, 最小值为 4.
source_retry_count默认值从 60 改到了 10, 减少 failover 或重连时的等待时间.
temptable_max_ram默认值从 1GB 改到了系统内容的 3%(需在 1GB ~ 4GB 之间), 最大范围可以设置为 2097152 ~ 2^64 -1
master_info_repository已移除
relay_log_info_repository已移除
default_authentication_plugin已移除
expire_logs_days已移除
innodb_large_prefix已移除, 8.0 也已移除. ROW_FORMAT 为 DYNAMIC/COMPRESSED 时最大为 3072 字节, 为 REDUNDANT/COMPACT 时, 最大为 767 字节.

主从复制变化

MySQL  8.4 不再支持早期 MySQL 版本中已弃用的 MySQL 复制中使用的一些 SQL 语句。尝试使用这些语句将导致语法错误。

MASTER/SLAVESOURCE/REPLICA
CHANGE MASTER TOCHANGE REPLICATION SOURCE TO
RESET MASTERRESET BINARY LOGS AND GTIDS
SHOW MASTER STATUSSHOW BINARY LOG STATUS
PURGE MASTER LOGSPURGE BINARY LOGS
SHOW MASTER LOGSSHOW BINARY LOGS
START SLAVESTART REPLICA
STOP SLAVESTOP REPLICA
SHOW SLAVE STATUSSHOW REPLICA STATUS
SHOW SLAVE HOSTSSHOW REPLICAS
RESET SLAVERESET REPLICA
MASTER_AUTO_POSITIONSOURCE_AUTO_POSITION
MASTER_HOSTSOURCE_HOST
MASTER_PORTSOURCE_PORT
MASTER_USERSOURCE_USER
MASTER_CONNECT_RETRYSOURCE_CONNECT_RETRY
MASTER_RETRY_COUNTSOURCE_RETRY_COUNT
MASTER_LOG_FILESOURCE_LOG_FILE
MASTER_LOG_POSSOURCE_LOG_POS

主从相关的系统状态变量也有了变化:

Com_slave_startCom_replica_start
Com_slave_stopCom_replica_stop
Com_show_slave_statusCom_show_replica_status
Com_show_slave_hostsCom_show_replicas
Com_show_master_statusCom_show_binary_log_status
Com_change_masterCom_change_replication_source

mysqldump 备份

8.4 版本 --output-as-version 为mysqldump添加了此选项。此选项允许您从 MySQL 8.2 或更高版本的服务器创建与旧版本 MySQL 兼容的转储;其值(此处列出的值之一)决定了转储中使用的复制术语的兼容性:

  • SERVER获取服务器版本,并使用与该 MySQL 版本兼容的最新复制语句和变量名称。
  • BEFORE_8_2_0输出结果与运行 8.0.23 至 8.1.0 版本的 MySQL 服务器兼容。
  • BEFORE_8_0_23:输出与运行 8.0.23 之前版本的 MySQL 服务器兼容。

另外以下几个选项也值得注意:

master-datasource-data
dump-slavedump-replica
apply-slave-statementsapply-replica-statements

其它变化

8.4 支持 Automatic Histogram Updates(ANALYZE TABLE AUTO UPDATE), 可以自动让统计的状态保持最新, 有利于查询优化.

允许标记事务组, 用来提升 replication 中的跟踪和审计.

新增 FLUSH_PRIVILEGES 权限, 允许执行对应 FLUSH PRIVILEGES 语句的权限.

FLUSH HOSTS 8.4 中变更为语句 TRUNCATE TABLE performance_schema.host_cache.

INFORMATION_SCHEMA.TABLESPACES 在 8.0.22 中已经废弃, 在 8.4 版本中已经移除.

从 8.0.22 开始, unix_timestamp 的结果会根据参数中的表达式字面值来判断, 明显位字符串的返回预期的值, 否则将表达式结果当做 DECIMAL 类型处理, 最终返回包含 6 位小数的结果.

References

What Is New in MySQL 8.4 since MySQL 8.0

Leave a Comment