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.hqwc.cn/news/578625.html

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

相关文章

顶顶通呼叫中心中间件-声音编码自适应配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-声音编码自适应配置方法讲解(mod_cti基于FreeSWITCH) 声音编码自适应介绍 声音编码自适应&#xff0c;通常在语音通信和音频处理领域中指的是一种能够根据信号特性和传输环境自动调整编码参数的技术。其目的是在不同的网络状况和音质要求下&#xff0c;…

【php程序开发从入门到精通】——搭建PHP开发环境

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Java集成E签宝实现签署

完整代码&#xff1a;java-boot-highpin-background: 背调服务 (gitee.com) 【暂不开源】 1.在application.yml中配置appid、密钥信息&#xff0c;包含沙箱环境javaesign:host: https://smlopenapi.esign.cnappId: your appIdappSecret: your secret 2.实现电子签的主要流程在…

Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理

前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心&#xff0c;它集中存储您的数据&#xff0c;帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …

kubernetes(K8S)学习(七):K8S之系统核心组件

K8S之系统核心组件 K8s系统核心组件1.1 Master和Node1.2 kubeadm1.3 先把核心组件总体过一遍1.4 Kubernetes源码查看方式1.5 kubectl1.6 API Server1.7 集群安全机制之API Server1.8 Scheduler1.9 kubelet1.10 kube-proxy K8s系统核心组件 1.1 Master和Node 官网 &#xff1a;…

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…

【C++笔记】异常与智能指针

一、异常 1.1、C的异常的使用 其实在C语言阶段我们就接触过异常了&#xff0c;例如C语言中的assert断言判断程序错误以及errorno异常编号。 而C中把异常设计成了一个类&#xff0c;如果要使用C中的异常&#xff0c;就要引入exception这个头文件&#xff1a; 这个头文件中就是…

基于Web的社区医院管理服务系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 1. 系统功能…

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流…

带你认识线程

线程的概念 前言&#xff1a; 一个程序运行起来&#xff0c;就会对应一个进程&#xff0c;例如&#xff0c;启动一个 Java 程序&#xff0c;就会创建一个 Java 进程。进程也被称为系统分配资源的基本单位。 一个进程可以包含一个线程&#xff0c;也可以包含多个线程&#xff…

C语言查找-----------BF算法KMP算法

1.问题引入 有一个主字符串&#xff0c;有一个子字符串&#xff0c;要求我们寻找子字符串在主字符串里面开始出现的位置&#xff1b; 2.BF算法 BF算法就是暴力算法&#xff0c;这个做法虽然效率不高&#xff0c;但是按照我们传统的思路依然能够得到结果&#xff0c;接下来我们…

HarmonyOS实战开发-实现Ability内页面间的跳转和数据传递。

介绍 本篇Codelab基于Stage模型下的Ability开发&#xff0c;实现Ability内页面间的跳转和数据传递。 最终效果图如下&#xff1a; 相关概念 页面路由&#xff1a;提供通过不同的url访问不同的页面&#xff0c;包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、…