1 、 MySQL 8.4 新特性
MySQL 8.0 版本即将于 2026 年 4 月结束服务支持,而 MySQL 8.4 作为当前的 LTS 版本,在 MySQL 的 Release Notes 和手册上都被加上了 current 标记。也就是说,对版本选择偏稳重的,可以在 8.0 版本后选择 8.4 版本。
2 、 InnoDB 新特性
InnoDB 中几个主要参数(没有全部列出)的默认值发生变化,如下:
|
参数名 |
8.4 默认值 |
8.0 默认值 |
|
innodb_buffer_pool_in_core_file |
支持 MADV_DONTDUMP 时默认 OFF ,其他情况下默认 ON |
ON |
|
innodb_buffer_pool_instances |
当 IBP <= 1GB 时为 1 ,当 IBP > 1GB 时会根据公式自动计算 |
8 ,当 IBP <= 1GB 时为 1 |
|
innodb_change_buffering |
none |
all |
|
innodb_adaptive_hash_index |
OFF |
ON |
|
innodb_doublewrite_files |
2 |
innodb_buffer_pool_instances*2 |
|
innodb_flush_method ( Linux 系统中) |
系统支持时为 O_DIRECT ,否则 fsync |
fsync |
|
innodb_io_capacity |
1000 |
200 |
|
innodb_io_capacity_max |
innodb_io_capacity*2 |
innodb_io_capacity*2 ,且最小值为 2000 |
|
innodb_log_buffer_size |
64MB |
16MB |
|
innodb_numa_interleave |
ON |
OFF |
|
innodb_page_cleaners |
innodb_buffer_pool_instances |
4 |
|
innodb_parallel_read_threads |
CPU 逻辑核数 /8 ,默认最低为 4 |
4 |
|
innodb_purge_threads |
CPU 逻辑核数 <=16 时为 1 ,否则为 4 |
4 |
|
innodb_read_io_threads |
CPU 逻辑核数 /8 ,默认最低为 4 |
4 |
|
innodb_use_fdatasync |
ON |
OFF |
临时表相关几个参数的默认值也发生变化
|
参数名 |
8.4 默认值 |
8.0 默认值 |
|
temptable_max_ram |
物理内存 * 3% ,且默认值的范围在 1-4GB 间 |
1GB |
|
temptable_max_mmap |
0 (禁用) |
1GB |
|
temptable_use_mmap |
OFF |
ON ,从 8.0.26 开始提示即将弃用 |
3 、 MGR 新特性
有两个 MGR 参数默认值发生变化:事务一致性级别参数 group_replication_consistency 从 EVENTUAL 调整为 BEFORE_ON_PRIMARY_FAILOVER ;节点退出后的默认行为参数 group_replication_exit_state_action 从 READ_ONLY 调整为 OFFLINE_MODE 。
在 MGR 中切换新的主节点时,需要等待当前的 DDL 操作(例如 ALTER TABLE )以及大部分 DCL 操作(例如 ALTER DATABASE )结束才能继续。
对 MGR 的版本兼容约束也放宽了,支持相同大版本内的小版本原地降级(例如从 8.4.2 原地降级到 8.4.0 );另外,只要是大版本号相同,小版本号不同的多个节点也可以混跑(例如在 8.4.0 、 8.4.2 、 8.4.3 三个不同小版本号的节点可以在一起跑 MGR )。
在 MGR 中新增参数 group_replication_preemptive_garbage_collection ,设置为 ON 时,在单主模式下会启用了抢占式 GC ( garbage collection ),仅保留尚未提交的事务 writeset 。这可以节省时间和内存消耗。同时新增 group_replication_presemptive_garbage_collection_rows_threshold 参数用于设置了触发抢占式 GC 所需的认证事务数最小值,默认为 100000 。
4 、主从复制新特性
Clone 插件不再严格要求连小版本号也要一致才行,允许在同一个大版本内进行克隆。这个特性不错,希望未来能继续提升兼容性,支持在不同大版本间 Clone 数据。
在主从复制中,参数 SOURCE_RETRY_COUNT 默认值从 86400 调整为 10 。即默认行为是 重试 10 次,每次间隔 60 秒,总共 10 分钟。在 8.0 中默认行为是重试 86400 次,每次间隔 60 秒,总共 60 天。
支持对 GTID 事务设置不同的 tag (标签),这对于运维很友好,比如针对一些特殊操作加上特别的标签便于后续区分。
在从服务器上执行 START REPLICA 启动复制线程时,子句 SQL_AFTER_GTIDS 支持多线程并行回放工作模式。在以前,启用多线程并行回放时,如果加上 SQL_AFTER_GTIDS 会提示 ER_MTA_FEATURE_IS_NOT_SUPPORTED 告警,并自动切换到单线程回放模式。
5 、其他新特性
无论是否执行了 ANALYZE TABLE 操作,都支持自动更新直方图统计信息,自动更新的规则和 InnoDB 表统计信息自动更新规则一样,详情参考 innodb_stats_auto_recalc 参数。
默认不再启用认证插件 mysql_native_password ,如果需要启用以兼容旧的应用程序的话,则要在启动时加上 --mysql-native-password=ON 参数,也可以在运行时在线动态设置 SET GLOBAL mysql_native_password=ON 启用。
在 mysqldump 中增加 --output-as-version 参数,支持设置对旧版本的兼容性模式。
针对 FLUSH PRIVILEGES 新增相应的授权 FLUSH_PRIVILEGES 。
新增一些保留关键字: AUTO, BERNOULLI, GTIDS, LOG, MANUAL, PARALLEL, PARSE_TREE, QUALIFY, S3, TABLESAMPLE ,这些保留关键字不可用于库、表、字段等数据库对象名称。
6 、 MySQL 4.0 版本弃用的特性
参数 binlog_transaction_dependency_tracking ,因为总是使用 WRITESET 机制。
参数 group_replication_allow_local_lower_version_join 。
从 8.3.0 开始, MGR 组成员元数据信息会在各节点间共享,因此不再需要依赖组视图变化事件,相应地,参数 group_replication_view_change_uuid 也不再需要。
废弃函数 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() 。
在主从复制中如果已启用 GTID 模式,则已被应用的事务会自动被忽略,这意味着 IGNORE_SERVER_IDS 参数和 GTID 模式将不兼容。
废弃参数 expire_logs_days ,改用 binlog_expire_logs_seconds 参数。
废弃参数 group_replication_recovery_complete_at 。从 8.4.0 开始,分布式事务恢复过程中的策略总是:只有在新成员接收、认证并应用了其加入组之前发生的所有事务后,才会标记在线;这相当于在早期版本中设置 group_replication_recovery_complete_at = TRANSACTIONS_APPLIED 同样的效果。
