MySQL 8.4: 突破创新,全新特性揭秘

    MySQL最新发布的MySQL8.4LTS,"LTS" 代表 "Long-Term Support"(长期支持),是软件行业常用的术语之一。在软件开发中,LTS 版本是指那些经过特别维护并提供长期支持的版本。通常,LTS 版本会获得更长时间的更新和安全补丁支持,以确保它们能够在较长的时间内保持稳定和可靠。

      对于 MySQL 来说,发布 LTS 版本意味着这个版本将会得到更长时间的维护和支持,以满足用户的需求。MySQL 8.4 是 MySQL 的第一个 LTS 版本,意味着它将获得更长时间的更新和安全补丁支持,以及可能的修复和改进,为用户提供更稳定和可靠的数据库服务。LTS 版本的发布通常会吸引更多企业级用户,因为他们更倾向于使用长期支持版本来确保系统的稳定性和可靠性。

MySQL 本机密码身份验证更改

开启:

从 MySQL 8.4.0 开始,已弃用的身份验证,默认情况下,插件不再启用。要启用它,需要再启动时添加--mysql-native-password=ON,或在配置文件添加

[mysqld]
mysql_native_passwordmysql_native_password=ON

禁用:

再启动时不添加--mysql-native-password参数,或在配置文件添加

[mysqld]
mysql_native_passwordmysql_native_password=OFF

InnoDB 系统变量默认值更改

innodb_buffer_pool_in_core_file

MySQL 8.4

MySQL 8.0

OFF  如果支持, 否则MADV_DONTDUMPON

ON

innodb_buffer_pool_instances

MySQL 8.4

如果innodb_buffer_pool_size <= 1 GiB,则 innodb_buffer_pool_instances=1

如果innodb_buffer_pool_size > 1 GiB,则这是 以下两个计算的提示在 1-64 范围内:

缓冲池提示:按 1/2 计算 (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)

CPU 提示:按 1/4 的数目计算 可用的逻辑处理器

MySQL 8.0

8 个(如果innodb_buffer_pool_size则为 1 个< 1 GiB)

innodb_change_buffering

MySQL 8.4

MySQL 8.0

none   表示不缓存这些修改操作

all    表示innodb_change_buffering会缓存插入、删除标记操作和后台发生的物理删除操作。

innodb_dedicated_server

MySQL 8.4

MySQL 8.0

如果 [a],则 innodb_flush_method 的值为 不再像 MySQL 8.0 那样更改,而是计算 的 innodb_redo_log_capacity 从基于内存更改为基于 CPU。查看更多 信息,请参见第 17.8.12 节 “为专用 MySQL 服务器启用自动配置”。ON

OFF

innodb_adaptive_hash_index

MySQL 8.4

MySQL 8.0

OFF   控制是否启用自适应哈希索引

ON

innodb_doublewrite_files

MySQL 8.4

MySQL 8.0

2

innodb_buffer_pool_instances*2

innodb_doublewrite_pages

MySQL 8.4

MySQL 8.0

128

innodb_write_io_threads,这意味着一个 默认值为 4

innodb_flush_method

MySQL 8.4

MySQL 8.0

O_DIRECT如果支持,否则fsync

fsync

innodb_io_capacity

MySQL 8.4

MySQL 8.0

10000    限制 InnoDB 数据库实例对磁盘的 I/O 能力,现在一般都是SSD的磁盘

200

innodb_io_capacity_max

MySQL 8.4

MySQL 8.0

2 * innodb_io_capacity

2 * innodb_io_capacity,最小 默认值为 2000

innodb_log_buffer_size

MySQL 8.4

MySQL 8.0

67108864 (64 MiB)

16777216 (16 MiB)

innodb_numa_interleave

MySQL 8.4

MySQL 8.0

ON    控制 InnoDB 存储引擎在 NUMA 架构下的内存分配方式

OFF

innodb_page_cleaners

MySQL 8.4

MySQL 8.0

innodb_buffer_pool_instances

4

innodb_parallel_read_threads

MySQL 8.4

MySQL 8.0

可用的逻辑处理器 / 8,最小默认值为 4

4

innodb_purge_threads

MySQL 8.4

MySQL 8.0

如果可用的逻辑处理器为 <= 16,则为 1,否则为 4

4

innodb_read_io_threads

MySQL 8.4

MySQL 8.0

可用的逻辑处理器 / 2,最小默认值为 4

4

innodb_use_fdatasync

MySQL 8.4

MySQL 8.0

ON   控制了 InnoDB 存储引擎在提交事务时是否使用 fdatasync() 函数来确保数据持久化到磁盘上

OFF

temptable_max_ram

MySQL 8.4

MySQL 8.0

总内存的 3%,默认值在 1-4 GiB 范围内

1 GiB

temptable_max_mmap

MySQL 8.4

MySQL 8.0

0,表示OFF,用于控制 MySQL 临时表(Temporary Table)的内存映射操作的最大限制

1 GiB

temptable_use_mmap

MySQL 8.4

MySQL 8.0

OFF

ON

克隆插件

放宽了克隆插件版本控制要求,允许克隆 在同一系列中的不同点版本之间。

例如,克隆功能现在允许克隆 8.4.0 到 8.4.14,反之亦然。

MySQL 复制:标记 GTID

  • GTID 是 MySQL 复制中用于标识全局唯一事务的一种机制,它可以跨多个服务器节点确保事务的唯一性和一致性。

  • 在介绍中提到的新的 GTID 格式包含了 TAG,这是一个最多 8 个字符的字符串,用于在特定组中唯一标识事务。通过设置 gtid_next 系统变量的值,可以启用这种新的 GTID 格式。在新格式下,每个事务都会自动分配一个唯一的 TAG,这个 TAG 在事务提交时或在组复制中进行认证时被应用。

  • GTID 的原始格式仍然保持不变,可以继续在不需要使用 GTID 的复制设置中使用。这个格式包含了 UUID 和 NUMBER

  • SET @gtid_next=AUTOMATIC:TAGUUID:TAG:NUMBER 这个示例演示了如何使用新的 GTID 格式,其中 AUTOMATIC:TAGUUID:TAG:NUMBER 表示了新的 GTID 值

    Mysqldump向后兼容

    该版本为 mysqldump 添加了 --output-as-version 选项

    此选项 允许您从 MySQL 8.2 或更高版本创建转储 与旧版本MySQL兼容; 它的值决定了 转储中使用的复制的兼容性:

    • SERVER:获取 服务器并使用最新版本的复制 与该MySQL兼容的语句和变量名 版本。

    • BEFORE_8_2_0:输出兼容 使用运行版本 8.0.23 至 8.1.0(含)。

    • BEFORE_8_0_23:输出兼容 MySQL 服务器运行 8.0.23 之前的版本。

      组复制

      group_replication_set_as_primary

      选举新主节点前,会等待正在进行的 DDL 语句完成。

      group_replication_consistency

      系统变量的默认值在 MySQL 8.4.0 中已更改为 EVENTUAL。在此之前,默认值是 BEFORE_ON_PRIMARY_FAILOVER。这个变量用于配置组复制的一致性保证级别,决定了在什么情况下事务在组中的副本之间达到一致性。更改后的默认值表示事务在组内的复制延迟可能导致一致性差异,但是在某些情况下可以提高性能。

      group_replication_exit_state_action

      系统变量的默认值在 MySQL 8.4.0 中已更改为 READ_ONLY。在此之前,默认值是 OFFLINE_MODE。这个变量用于配置组复制节点在退出组时的行为。更改后的默认值表示节点在退出组时会被设置为只读模式,以避免数据的写入操作。

      FLUSH_PRIVILEGES特权

      MySQL 8.4.0 中添加了一个新权限,专门用于 允许使用 FLUSH PRIVILEGES 语句。与 RELOAD 权限不同,FLUSH_PRIVILEGES 权限 仅适用于语句。FLUSH PRIVILEGES

      OPTIMIZE_LOCAL_TABLE特权

      MySQL 8.4.0 添加了新的OPTIMIZE_LOCAL_TABLE权限。用户必须具有此权限才能执行 OPTIMIZE 本地表和优化 NO_WRITE_TO_BINLOG TABLE 语句

      加入数据库技术交流群:

      进群福利:

      1、知识共享与学习机会

      2、问题求助与解决支持

      3、技术沉淀和分享平台

      4、及时了解行业动态