社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

看完这篇,你就知道是否要升级到MySQL 8.4 LTS

OSC开源社区 • 3 月前 • 95 次点击  

写在前面

MySQL 8.0 版本即将于 2026 年 4 月结束服务支持,而 MySQL 8.4 作为当前的 LTS 版本,在 MySQL 的 Release Notes 和手册上都被加上了 current 标记。

也就是说,对版本选择偏稳重的铁子们,可以在 8.0 版本后选择 8.4 版本。

升级、降级 兼容关系表

先看下未来几个主要版本之间的 升级、降级 兼容关系表,作为选择具体哪个版本之前的重要参考之一(本表格内容摘自徐轶韬老师主理的公众号:MySQL解决方案工程师):

  • 升级

原地克隆异步复制转储/加载
LTS 8.4 → LTS 9.7
LTS 8.4.11 → LTS 8.4.20
Innovation 8.1 → 8.2
Innovation 8.1 → 8.3
Innovation 9.1 → LTS 9.7
LTS 8.4 →  LTS 10.7
  • 降级

原地克隆异步复制转储/加载
LTS 8.4.20 → 8.4.11
LTS 9.7 → LTS 8.4✓✮✓✮
LTS 9.7 → Innovation 9.6✓✮✓✮
LTS 9.7 → Innovation 9.5✓✮✓✮

✮表示仅用于回滚目的。

MySQL 8.4 新变化

下面罗列 MySQL 8.4 相对 8.0 版本我个人认为比较关键的一些变化,感觉相对没那么重要的就没列出。

InnoDB 相关新变化

  1. 以下是 InnoDB 中几个主要参数(没有全部列出)的默认值发生变化
参数名8.4 默认值8.0 默认值
innodb_buffer_pool_in_core_file支持 MADV_DONTDUMP 时默认 OFF,其他情况下默认 ONON
innodb_buffer_pool_instances当 IBP <= 1GB 时为 1,当 IBP > 1GB 时会根据公式自动计算8,当 IBP <= 1GB 时为 1
innodb_change_bufferingnoneall
innodb_adaptive_hash_indexOFFON
innodb_doublewrite_files2innodb_buffer_pool_instances*2
innodb_flush_method(Linux系统中)系统支持时为 O_DIRECT,否则 fsyncfsync
innodb_io_capacity1000200
innodb_io_capacity_maxinnodb_io_capacity*2innodb_io_capacity*2,且最小值为 2000
innodb_log_buffer_size64MB16MB
innodb_numa_interleaveONOFF
innodb_page_cleanersinnodb_buffer_pool_instances4
innodb_parallel_read_threadsCPU逻辑核数/8,默认最低为 44
innodb_purge_threadsCPU逻辑核数 <=16 时为 1,否则为 44
innodb_read_io_threadsCPU逻辑核数/8,默认最低为 44
innodb_use_fdatasyncONOFF
  1. 临时表相关几个参数的默认值也发生变化

参数名 8.4 默认值8.0 默认值
temptable_max_ram物理内存 * 3%,且默认值的范围在 1-4GB 间1GB
temptable_max_mmap0(禁用)1GB
temptable_use_mmapOFFON,从 8.0.26 开始提示即将弃用


MGR 相关新变化

  1. 有两个 MGR 参数默认值发生变化:事务一致性级别参数 group_replication_consistencyEVENTUAL 调整为 BEFORE_ON_PRIMARY_FAILOVER;节点退出后的默认行为参数 group_replication_exit_state_actionREAD_ONLY 调整为 OFFLINE_MODE
  2. 在 MGR 中切换新的主节点时,需要等待当前的 DDL 操作(例如 ALTER TABLE)以及大部分 DCL 操作(例如 ALTER DATABASE)结束才能继续。
  3. 对 MGR 的版本兼容约束也放宽了,支持相同大版本内的小版本原地降级(例如从 8.4.2 原地降级到 8.4.0);另外,只要是大版本号相同,小版本号不同的多个节点也可以混跑(例如在 8.4.0、8.4.2、8.4.3 三个不同小版本号的节点可以在一起跑 MGR)。
  4. 在 MGR 中新增参数 group_replication_preemptive_garbage_collection,设置为 ON 时,在单主模式下会启用了抢占式 GC(garbage collection),仅保留尚未提交的事务 writeset。这可以节省时间和内存消耗。同时新增 group_replication_presemptive_garbage_collection_rows_threshold 参数用于设置了触发抢占式 GC 所需的认证事务数最小值,默认为 100000。

主从复制及 Clone 相关新变化

  1. Clone 插件不再严格要求连小版本号也要一致才行,允许在同一个大版本内进行克隆。这个特性不错,希望未来能继续提升兼容性,支持在不同大版本间 Clone 数据。
  2. 在主从复制中,参数 SOURCE_RETRY_COUNT默认值从 86400 调整为 10。即默认行为是 重试 10 次,每次间隔 60 秒,总共 10 分钟。在 8.0 中默认行为是重试 86400 次,每次间隔 60 秒,总共 60 天(这也太过于疯狂了吧 ~~)。
  3. 支持对 GTID 事务设置不同的 tag(标签),这对于运维很友好,比如针对一些特殊操作加上特别的标签便于后续区分。
  4. 在从服务器上执行START REPLICA 启动复制线程时,子句 SQL_AFTER_GTIDS 支持多线程并行回放工作模式。在以前,启用多线程并行回放时,如果加上 SQL_AFTER_GTIDS 会提示 ER_MTA_FEATURE_IS_NOT_SUPPORTED 告警,并自动切换到单线程回放模式。

其他新变化

  1. 无论是否执行了ANALYZE TABLE操作,都支持自动更新直方图统计信息,自动更新的规则和 InnoDB 表统计信息自动更新规则一样,详情参考 innodb_stats_auto_recalc 参数。
  2. 默认地,不再启用认证插件 mysql_native_password,如果需要启用以兼容旧的应用程序的话,则要在启动时加上 --mysql-native-password=ON 参数,也可以在运行时在线动态设置 SET GLOBAL mysql_native_password=ON 启用。
  3. mysqldump 中增加 --output-as-version 参数,支持设置对旧版本的兼容性模式。
  4. 针对 FLUSH PRIVILEGES 新增相应的授权 FLUSH_PRIVILEGES
  5. 新增一些保留关键字:AUTO, BERNOULLI, GTIDS, LOG, MANUAL, PARALLEL, PARSE_TREE, QUALIFY, S3, TABLESAMPLE,这些保留关键字不可用于库、表、字段等数据库对象名称。

MySQL 8.4 中弃用或不再建议使用的特性、参数

下面是未来准备弃用的一些特性及参数

  1. 参数 binlog_transaction_dependency_tracking,因为总是使用 WRITESET 机制。
  2. 参数 group_replication_allow_local_lower_version_join
  3. 从 8.3.0 开始,MGR 组成员元数据信息会在各节点间共享,因此不再需要依赖组视图变化事件,相应地,参数 group_replication_view_change_uuid 也不再需要。
  4. 废弃函数 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
  5. 在主从复制中如果已启用 GTID 模式,则已被应用的事务会自动被忽略,这意味着 IGNORE_SERVER_IDS 参数和 GTID 模式将不兼容。
  6. 废弃参数 expire_logs_days,改用 binlog_expire_logs_seconds 参数。
  7. 废弃参数 group_replication_recovery_complete_at。从 8.4.0 开始,分布式事务恢复过程中的策略总是:只有在新成员接收、认证并应用了其加入组之前发生的所有事务后,才会标记在线;这相当于在早期版本中设置 group_replication_recovery_complete_at = TRANSACTIONS_APPLIED 同样的效果。

写在最后

总的来说,MySQL 8.4 看起来是作为 8.0 的延续并成为 LTS 版本。

两个版本间的变化并不算太大,并且主要集中在 InnoDB 引擎方面。

无论对开发者还是DBA来说都能很快适配和适应。

想要体验激进新特性的话,可以尝试 8.1/8.2/8.3/9.0 等创新版本。

延伸阅读

更多 MySQL 8.4 新变化内容请参考文档:What Is New in MySQL 8.4 since MySQL 8.0,https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html

以上。



本文转载自「 老叶茶馆」微信公众号

该开始关注 MySQL 8.4 了

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/173913
 
95 次点击