MySQL Server 8.3.0 重要变更解析

MySQL Server 8.3.0 Innovation 版本是 MySQL 8.x 系列最后一个创新版本,下个月即将迎来 MySQL 8.4.0 LTS 长期支持版本。

关于发版模型变更,在之前的文章 重磅!MySQL 8.1.0 已来! 中已有所介绍。

这里补充一点,对于 MySQL 8.x 系列,8.4.x 将作为 LTS 长期支持版本,而从 9.x 开始,9.7.x 将作为 LTS 长期支持版本。

这在源码的编译文件中也有所体现。

  # Versions like 8.0.x, 8.4.x, and x.7.y (x > 8) should be LTS
  IF ((MAJOR_VERSION EQUAL "8" AND MINOR_VERSION EQUAL "0" AND PATCH_VERSION GREATER "34") OR
      (MAJOR_VERSION EQUAL "8" AND MINOR_VERSION EQUAL "4") OR
      (MAJOR_VERSION GREATER "8" AND MINOR_VERSION EQUAL "7"))
    IF (NOT MYSQL_VERSION_STABILITY STREQUAL "\"LTS\"")
      MESSAGE(FATAL_ERROR "Version ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION} should "
                          "be an LTS release.")
    ENDIF()
  ELSE()
    IF (NOT MYSQL_VERSION_STABILITY STREQUAL "\"INNOVATION\"")
      MESSAGE(FATAL_ERROR "Version ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION} should "
                          "be an innovation release.")
    ENDIF()
  ENDIF()

言归正传,接下来一起来看下 MySQL 8.3.0 都有哪些变化。

1. 平台支持

随着时间的推移,MySQL 支持的平台发生了变化,例如:

  • 8.3 不再支持 Oracle Linux 6 / Red Hat Enterprise Linux 6 / CentOS 6
  • 8.3 不再支持 Microsoft Windows 10

2. 新特性

在认证方面,Windows 平台上现在支持基于 SASL 的 LDAP 认证,这为使用 Windows 客户端程序的用户提供了更多选择。

MySQL 企业版数据掩码和去标识化组件新增了将数据刷新到内存的能力,这有助于提高数据处理的效率。

同时,MySQL 企业版还新增了使用 OpenTelemetry 格式收集服务器指标数据的遥测功能,这对于监控和优化服务器性能非常有用。

3. 复制

复制 with GTID 方面,扩展了全局事务标识符(GTID)的格式,以支持通过标签标识事务组,增强了对复制和组复制中事务的识别和管理。

新 GTID 格式为 UUID:<TAG>:NUMBER,该功能通过系统参数 gtid_next=AUTOMATIC:<TAG> 进行控制。

mysql> set gtid_next='AUTOMATIC:tag_shawnyan';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'gtid%';
+----------------------------------+-------------------------------------------------------+
| Variable_name                    | Value                                                 |
+----------------------------------+-------------------------------------------------------+
| gtid_executed                    | bdb6b1eb-eb90-11ee-ae1d-0242ac110002:tag_shawnyan:1-2 |
| gtid_executed_compression_period | 0                                                     |
| gtid_mode                        | ON                                                    |
| gtid_next                        | AUTOMATIC:tag_shawnyan                                |
...

MySQL 8.3 还解决了与复制和组复制相关的多个问题。

例如,现在 group_replication_set_as_primary() 函数在选举新的主节点之前会等待 DDL 和 DCL 语句完成,这有助于确保数据的一致性和完整性。

同时,还修复了一些可能导致内存泄漏、错误监控线程和锁问题的问题。

4. 系统参数

MySQL 8.3.0 有 1 个系统参数的默认值发生变更,新增 1 个参数,移除 6 个参数。

1. binlog_transaction_dependency_tracking

该系统变量在 MySQL 8.2.0 中已弃用。为了准备最终删除这个变量,它的默认值由 COMMIT_ORDER 变更为 WRITESET

binlog_transaction_dependency_tracking 设置为 WRITESET 有助于提升组复制的性能。

2. explain_json_format_version

新增参数 explain_json_format_version,用于指定 EXPLAIN FORMAT = JSON 语句使用的 JSON 输出格式。

默认值为 1,表示传统输出格式,与之前样式保持一致。

可以设定为 2,表示基于路径访问的新格式,用于提供与未来版本的 MySQL 优化器更好的兼容性。

示例如下:

mysql> explain table t1\G
*************************** 1. row ***************************
EXPLAIN: {
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost""0.35"
    },
    "table": {
      "table_name""t1",
      "access_type""ALL",
      "rows_examined_per_scan": 1,
      "rows_produced_per_join": 1,
      "filtered""100.00",
      "cost_info": {
        "read_cost""0.25",
        "eval_cost""0.10",
        "prefix_cost""0.35",
        "data_read_per_join""224"
      },
      "used_columns": [
        "id",
        "n1",
        "n2"
      ]
    }
  }
}
1 row in set, 1 warning (0.00 sec)

Note (Code 1003): /* select#1 */ select `s1`.`t1`.`id` AS `id`,`s1`.`t1`.`n1` AS `n1`,`s1`.`t1`.`n2` AS `n2` from `s1`.`t1`
mysql> set explain_json_format_version = 2;
Query OK, 0 rows affected (0.00 sec)

mysql> explain table t1\G
*************************** 1. row ***************************
EXPLAIN: {
  "query""/* select#1 */ select `s1`.`t1`.`id` AS `id`,`s1`.`t1`.`n1` AS `n1`,`s1`.`t1`.`n2` AS `n2` from `s1`.`t1`",
  "operation""Table scan on t1",
  "table_name""t1",
  "access_type""table",
  "schema_name""s1",
  "used_columns": [
    "id",
    "n1",
    "n2"
  ],
  "estimated_rows": 1.0,
  "estimated_total_cost": 0.35
}
1 row in set (0.02 sec)

再例,查看分区表的执行计划:

mysql> set explain_json_format_version = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> explain select CUSTOMER_ID, TRADE_D from tp where TRADE_D = '2024-01-01'\G
*************************** 1. row ***************************
EXPLAIN: {
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost""0.45"
    },
    "table": {
      "table_name""tp",
      "partitions": [
        "p202401"
      ],
      "access_type""ref",
      "possible_keys": [
        "PRIMARY",
        "idx_tp"
      ],
      "key""idx_tp",
      "used_key_parts": [
        "TRADE_D"
      ],
      "key_length""5",
      "ref": [
        "const"
      ],
      "rows_examined_per_scan": 2,
      "rows_produced_per_join": 2,
      "filtered""100.00",
      "using_index"true,
      "cost_info": {
        "read_cost""0.25",
        "eval_cost""0.20",
        "prefix_cost""0.45",
        "data_read_per_join""128"
      },
      "used_columns": [
        "CUSTOMER_ID",
        "TRADE_D"
      ]
    }
  }
}
1 row in set, 1 warning (0.00 sec)

Note (Code 1003): /* select#1 */ select `s1`.`tp`.`CUSTOMER_ID` AS `CUSTOMER_ID`,`s1`.`tp`.`TRADE_D` AS `TRADE_D` from `s1`.`tp` where (`s1`.`tp`.`TRADE_D` = TIMESTAMP'2024-01-01 00:00:00')
mysql>

mysql> set explain_json_format_version = 2;
Query OK, 0 rows affected (0.00 sec)

mysql> explain select CUSTOMER_ID, TRADE_D from tp where TRADE_D = '2024-01-01'\G
*************************** 1. row ***************************
EXPLAIN: {
  "query""/* select#1 */ select `s1`.`tp`.`CUSTOMER_ID` AS `CUSTOMER_ID`,`s1`.`tp`.`TRADE_D` AS `TRADE_D` from `s1`.`tp` where (`s1`.`tp`.`TRADE_D` = TIMESTAMP'2024-01-01 00:00:00')",
  "covering"true,
  "operation""Covering index lookup on tp using idx_tp (TRADE_D=TIMESTAMP'2024-01-01 00:00:00')",
  "index_name""idx_tp",
  "table_name""tp",
  "access_type""index",
  "schema_name""s1",
  "used_columns": [
    "CUSTOMER_ID",
    "TRADE_D"
  ],
  "estimated_rows": 2.0,
  "lookup_condition""TRADE_D=TIMESTAMP'2024-01-01 00:00:00'",
  "index_access_type""index_lookup",
  "estimated_total_cost": 0.45164473684210527
}
1 row in set (0.00 sec)

可以看到新格式的执行计划更加简洁,不过没有显示查询具体命中哪个分区。

3. 移除的系统变量

MySQL 8.3.0 中,与 MySQL 复制相关的一些变量被移除,具体如下:

  1. log_bin_use_v1_row_events

该参数从 MySQL 8.0.18 被废弃,曾用于 MySQL 5.5 及更早的版本,表示 v1 binlog 日志行事件。

  1. master_info_repository

该参数从 MySQL 8.0.23 被废弃,默认情况下,将复制连接的元信息写入 mysql.slave_master_info 表。

之前写入文件的选项也已经从 MySQL 8.0.18 被废弃。

  1. relay_log_info_repository

同上。

  1. relay_log_info_file

该参数从 MySQL 8.0.18 被废弃,在 8.3.0 中被移除。

  1. slave_rows_search_algorithms

用于副本批处理的搜索算法,控制是否使用索引扫描和 HASH 扫描。从 MySQL 8.0.18 被废弃。

默认设定为使用索引扫描,然后进行哈希扫描,这适用于全场景,且是最佳性能方式。

  1. transaction_write_set_extraction

该系统变量指定用于对事务期间提取的写入进行哈希处理的算法。从 MySQL 8.0.26 被废弃。

当开启组复制时,transaction_write_set_extraction 需要设定为 XXHASH64,用于事务冲突检测和认证。

该参数的另外一个值为 MURMUR32,是 32 位算法,不适用于大负荷场景,不建议使用。

总结

总的来说,MySQL 8.3.0 版本的发布为用户提供了更稳定、更高效、更安全的数据库解决方案。

期待,MySQL 8.4.0 LTS 的到来。

-- END --

alt

如果这篇文章为你带来了灵感或启发,就帮忙点『赞』or『在看』or『转发』吧,这对我非常重要,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/291886.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习鸿蒙基础(10)

目录 一、轮播组件 Swiper 二、列表-List 1、简单的List 2、嵌套的List 三、Tabs容器组件 1、系统自带tabs案例 2、自定义导航栏&#xff1a; 一、轮播组件 Swiper Entry Component struct PageSwiper {State message: string Hello Worldprivate SwCon: SwiperControl…

带你学习现代C++并发编程

通过对C并发编程的理解&#xff0c;我总结了相关的文档&#xff0c;有需要的可以关注我公众号&#xff0c;并给我留言&#xff01; 这是目录

集成ES分组查询统计求平均值

前言 之前其实写过ES查询数据&#xff0c;进行分组聚合统计&#xff1a; 复杂聚合分组统计实现 一、目标场景 机房机柜的物联网设备上传环境数据&#xff0c;会存储到ES存到ES的温湿度数据需要查询&#xff0c;进行分组后&#xff0c;再聚合统计求平均值 二、使用步骤 1.引入…

根据实例逐行分析NIO到底在做什么

Selector&#xff08;选择器&#xff09;是 Channel 的多路复用器&#xff0c;它可以同时监控多个 Channel 的 IO 状况&#xff0c;允许单个线程来操作多个 Channel。Channel在从Buffer中获取数据。 选择器、通道、缓冲池是NIO的核心组件。 一、新建选择器 此时选择器内只包含…

设计模式之解释器模式的魅力:让代码读懂你的语言

目录 一、什么是解释器模式 二、解释器模式的应用场景 三、解释器模式的优缺点 3.1. 优点 3.2. 缺点 四、解释器模式示例 4.1. 问题描述 4.2. 问题分析 4.3. 代码实现 4.4. 优化方向 五、总结 一、什么是解释器模式 解释器模式&#xff08;Interpreter pattern&…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式&#xff1a;使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

文件操作(顺序读写篇)

1. 顺序读写函数一览 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说…

时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测

时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测&#xff08;完整源码和数据…

如何在OceanBase的OCP多节点上获取日志

背景 在使用OceanBase的OCP的过程中&#xff0c;因各种因素&#xff0c;我们可能需要对当前页面进行跟踪。在单一ocp节点环境下&#xff0c;我们自然可以直接在该节点上查找所需的日志。然而&#xff0c;当我们的环境中部署了多个ocp节点时&#xff0c;在排查问题时就会变得相…

WPF中获取TreeView以及ListView获取其本身滚动条进行滚动

实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) TreeView:TreeViewAutomationPeer lvap new TreeViewAutomationPeer(treeView); var svap lvap.GetPattern(PatternInterface.Scroll) as ScrollViewerAutomationPeer; var scroll svap.Owner as ScrollVie…

sql Tuning Advisor启用导致业务性能问题

数据库每天晚上10点后业务性能很卡&#xff0c;大量的insert被堵塞&#xff0c;查询等待事件发现有大量的“library cache lock”和“cursor: pin S wait on X”。 22:00数据库的统计信息开始收集&#xff0c; Sql Tuning Advisor堵塞了统计信息的收集&#xff0c;等待事件是“…

Python之Opencv教程(1):读取图片、图片灰度处理

1、Opencv简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个用于计算机视觉和图像处理的开源库&#xff0c;提供了丰富的图像处理、计算机视觉和机器学习功能。它支持多种编程语言&#xff0c;包括C、Python、Java等&#xff0c;广泛应用于图像处…

Redis 的慢日志

Redis 的慢日志 Redis 的慢日志&#xff08;Slow Log&#xff09;是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈&#xff0c;定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…

Linux IRC

目录 入侵框架检测 检测流程图 账号安全 查找账号中的危险信息 查看保存的历史命令 检测异常端口 入侵框架检测 1、系统安全检查&#xff08;进程、开放端口、连接、日志&#xff09; 这一块是目前个人该脚本所实现的功能 2、Rootkit 建议使用rootkit专杀工具来检查&#…

【算法-PID】

算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节&#xff08;Proportion&#xff09;■ PID 积分环节&#xff08;Integral&#xff09;■ PID 微分环节&#xff08;Differential&#xff09; ■ 位置式PID&#xff0c;增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…

嵌入式数据库-Sqlite3

阅读引言&#xff1a; 本文将会从环境sqlite3的安装、数据库的基础知识、sqlite3命令、以及sqlite的sql语句最后还有一个完整的代码实例&#xff0c; 相信仔细学习完这篇内容之后大家一定能有所收获。 目录 一、数据库的基础知识 1.数据库的基本概念 2.常用数据库 3.嵌入式…

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一&#xff0c;拥有庞大的插件生态系统&#xff0c;为用户提供了丰富的功能扩展。在内容创作和SEO优化方面&#xff0c;有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…

Hides for Mac:应用程序隐藏工具

Hides for Mac是一款功能强大的应用程序隐藏工具&#xff0c;专为Mac用户设计。它能够帮助用户快速隐藏当前正在运行的应用程序窗口&#xff0c;保护用户的隐私和工作内容&#xff0c;避免不必要的干扰。 软件下载&#xff1a;Hides for Mac下载 Hides for Mac的使用非常简单直…

初步了解C++

目录 一&#xff1a;什么是C&#xff1f; 二.C发展史 三:C关键字 四&#xff1a;命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…