MySQL 8.3 发布, 它带来哪些新变化?

2024年 1月 22日 86.4k 0

1月16号 MySQL 官方发布 8.3 创新版 和  8.0.36 长期支持版本 (该版本 没有新增功能,更多是修复bug ),本文基于 官方文档 说一下 8.3 版本带来的变化。

一 增加的特性

1.1 GTID_NEXT 支持增加 TAG 选项。

之前的版本中  GTID_NEXT=UUID:number ,现在可以增加 一个 tag 字符串 GTID_NEXT=UUID:[TAG]:number ,用来对事务进行标示。 具体的用例如下:

mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 158
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  
1 row in set, 1 warning (0.00 sec)

mysql> insert into t(a) values(2);
Query OK, 1 row affected (0.00 sec)
mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 435
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  00008300-0000-0000-0000-000000008300:1
1 row in set, 1 warning (0.00 sec)

### 在会话级别设置 gtid_next 的值

mysql> set session  gtid_next='00008300-0000-0000-0000-000000008300:yangyidba:3';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t(a) values(2);
Query OK, 1 row affected (0.00 sec)

mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 722
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  00008300-0000-0000-0000-000000008300:1:yangyidba:3  ## 变成系统值和手工指定的2个值的结合
1 row in set, 1 warning (0.00 sec)

mysql> insert into t(a) values(2);
Query OK, 1 row affected (0.00 sec)

mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 995
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  00008300-0000-0000-0000-000000008300:1:yangyidba:1:3 
1 row in set, 1 warning (0.00 sec)

mysql> set session  gtid_next='00008300-0000-0000-0000-000000008300:yangyidba:2';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t(a) values(2);
Query OK, 1 row affected (0.00 sec)

mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 1296
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  00008300-0000-0000-0000-000000008300:1:yangyidba:1-3 
1 row in set, 1 warning (0.00 sec)
mysql> set session gtid_next='AUTOMATIC';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t(a) values(2);
Query OK, 1 row affected (0.00 sec)

mysql> show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 1296
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:  00008300-0000-0000-0000-000000008300:1-2:yangyidba:1-3 
1 row in set, 1 warning (0.00 sec)

更好玩的用法可以参考 https://lefred.be/content/mysql-8-3-purging-data-from-your-innodb-cluster/。不过生产环境 delete 数据不被下游记录一般是通过DTS 等 CDC 工具过滤实现。

1.2 EXPLAIN FORMAT=JSON 可选版本为1或者2

引入 explain_json_format_version
 参数调整 explain json 格式的输出 。设置 explain_json_format_version=1 时 ,explain format=json的输出如下

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "1.35"
    },
    "table": {
      "table_name": "t",
      "access_type": "ALL",
      "rows_examined_per_scan": 11,
      "rows_produced_per_join": 11,
      "filtered": "100.00",
      "cost_info": {
        "read_cost": "0.25",
        "eval_cost": "1.10",
        "prefix_cost": "1.35",
        "data_read_per_join": "176"
      },
      "used_columns": [
        "id",
        "a"
      ]
    }
  }
} |

设置 explain_json_format_version
=2 时 ,explain format=json的输出如下

 {
  "query": "/* select#1 */ select `test`.`t`.`id` AS `id`,`test`.`t`.`a` AS `a` from `test`.`t`",
  "operation": "Table scan on t",
  "table_name": "t",
  "access_type": "table",
  "schema_name": "test",
  "used_columns": [
    "id",
    "a"
  ],
  "estimated_rows": 11.0,
  "estimated_total_cost": 1.35
}

1.3 binlog_transaction_dependency_tracking
参数默认值改为 WRITESET

注意: 如果binlog_transaction_dependency_tracking设置为WRITESET或WRITESET_SESSION,binlog_format必须是ROW;MIXED在这种情况下不再受支持。

二 删除的功能 ,参数

2.1 移除参数

slave-rows-search-algorithms
log_bin_use_v1_events
relay-log-info-file
relay-log-info-repository
master-info-file
master-info-repository
transaction_write_set_extraction
skip-host-cache 
innodb 
skip-innodb
character-set-client-handshake 
old-style-user-limits

group_replication_ip_whitelist
group_replication_ip_allowlist
替代

不再需要 group_replication_primary_member
,可以通过查看performance_schema.replication_group_members
中的member_role
字段。

三 Performance Schema Notes

  1. 大量的查询  SELECT * from performance_schema.data_locks   会导致 内存增加 和死锁。

四 Thread Pool Notes

  1. 增加 一个系统表  tp_connections
    记录 连接池中每个链接的信息。

  2. tp_thread_state
     table:增加如下字段

    TIME_OF_ATTACH, 
    MARKED_STALLED,
    STATE,
    EVENT_COUNT, 
    ACCUMULATED_EVENT_TIME, 
    EXEC_COUNT, 
    ACCUMULATED_EXEC_TIME

  3. tp_thread_group_state
    :

    EFFECTIVE_MAX_TRANSACTIONS_LIMIT, 
    NUM_QUERY_THREADS, 
    TIME_OF_LAST_THREAD_CREATION, 
    NUM_CONNECT_HANDLER_THREAD_IN_SLEEP, 
    THREADS_BOUND_TO_TRANSACTION, 
    QUERY_THREADS_COUNT, 
    TIME_OF_EARLIEST_CON_EXPIRE

关于 Oracle MySQL 版本模型

Oracle 推出 MySQL 创新版 和 长期支持(LTS)版,这是MySQL版本模型的重要改进。

创新版和长期支持(LTS)版都具备生产级的质量。如果您希望获取最新的功能和改进,并保持对最新技术的了解,MySQL创新版可能最适合您。这些发布版本非常适用于在快节奏的开发环境中工作的开发人员和数据库管理员,他们拥有高度自动化的测试和现代持续集成技术,以实现更快的升级周期。另一方面,如果您的环境需要稳定的行为,那么长期支持(LTS)版是最合适的选择。这些版本仅包含必要的修复,因此可以降低与数据库软件行为变化相关的风险。

以下内容翻译自 Oracle mysql 团队的官方blog , 肯定有读者朋友 对 为什么有 8.3.0 这样的版本出来,有疑问?下面其实就是官方的解答。

过渡到创新版和长期支持(LTS)版

我们将在即将发布的版本中过渡到新的MySQL版本模型。MySQL数据库版本 8.1.0 将是我们的第一个创新版,而 8.0.34+ 将在 8.0 版本的生命周期结束(预计为2026年4月)之前只提供bug修复。大约一年后,MySQL 8.x 最终将成为长期支持(LTS)版,用户将有足够的时间从 8.0.x 迁移到 8.x LTS 版本。

在实践中,在这个过渡期内,如果您希望获得MySQL数据库的最新功能、改进和所有bug修复,请使用创新版(例如8.1.x、8.2.x、8.3.x等)。如果您只需要MySQL数据库的bug修复,请使用8.0.x版本(例如8.0.35、8.0.36、8.0.37等)。在这两种情况下,您应该根据Oracle关键补丁更新(CPU)日历计划每季度更新您的MySQL数据库。当8.x成为长期支持(LTS)版时,您可以计划、测试并从8.0.x的bug修复版本迁移到长期支持(LTS)版(例如从8.0.37迁移到8.4.1)。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论