网易首页 > 网易号 > 正文 申请入驻

TiDB 7.x 源码编译之 TiDB Server 篇,及新特性详解

0
分享至

本文将介绍如何编译 TiDB Server 源码。以及阐释 TiDB Server 7.x 的部分新特性。

TiDB v7.5.0 LTS 计划于 2023 年 11 月正式 Release,目前代码虽未冻结,但已经可以看到 Alpha 版本的 Code 了,本文代码将以 v7.5.0-alpha 为基准。

TiDB Server 编译

1.1 编译环境

与前几篇文章有所区别的是,本文使用 CentOS 7.9 和 Rocky Linux 9.2 两个版本的操作系统,分别进行编译测试。由于 TiDB Server 是 go 语言开发,所以在两个系统编译过程几乎没有区别,只需注意在编译之前安装系统开发工具包( yum groupinstall 'Development Tools' )。现已支持 Rocky Linux 9.1 系统,可以在生产环境放心使用。

查看版本信息:

cat /etc/redhat-releaseuname -a

输出日志:

● CentOS 7

[shawnyan@centos7 ~]$ cat /etc/redhat-releaseCentOS Linux release 7.9.2009 (Core)[shawnyan@centos7 ~]$ uname -aLinux centos7.shawnyan.cn 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

● Rocky Linux 9

[root@rocky9 ~]# cat /etc/redhat-release Rocky Linux release 9.2 (Blue Onyx)[root@rocky9 ~]# uname -aLinux rocky9.shawnyan.cn 5.14.0-284.11.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 17:09:15 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

在 TiDB v7.5.0-alpha 的代码中,Go 版本升级到 1.21.1 (released 2023-08-08) 。本文所使用的 Go 版本为 1.21.3 (released 2023-10-10) 。

go install golang.org/dl/go1.21.3@latestgo1.21.3 downloadgo1.21.3 versiongo version go1.21.3 linux/amd64

Ps. 同时,关于 Go 版本,给 QE 团队提了个 Issue:[Closed] update go v1.21.3 #2507 (https://github.com/PingCAP-QE/ci/issues/2507)

TiDB 源码仓库新建了 release-7.5 (https://github.com/pingcap/tidb/tree/release-7.5)分支,并且 Go 版本升级到了 1.21.3。(https://github.com/pingcap/tidb/pull/47440) (Update: 2023-10-17)

1.2 编译步骤

克隆下载源码到本地,这里指定 v7.5.0-alpha 分支。

$ git clone https://github.com/pingcap/tidb.git --depth=1 -b v7.5.0-alpha tidb7$ cd tidb7$ git lg* 8cfe7f3 - (grafted, HEAD -> v7.5.0-alpha, tag: v7.5.0-alpha) executor, tests: move some test cases from `admin_test.go` and `foreign_key_test.go` to `integrationtest` (#47333) (12 days ago)

编译 TiDB Server 仅需一条命令搞定。

make

输出日志:

[shawnyan@centos7 tidb7]$ makeCGO_ENABLED=1 GO111MODULE=on go build -tags codes -ldflags '-X "github.com/pingcap/tidb/parser/mysql.TiDBReleaseVersion=v7.5.0-alpha" -X "github.com/pingcap/tidb/util/versioninfo.TiDBBuildTS=2023-10-11 06:08:32" -X "github.com/pingcap/tidb/util/versioninfo.TiDBGitHash=8cfe7f329b56899a96422596da2b67d4e2bd1e94" -X "github.com/pingcap/tidb/util/versioninfo.TiDBGitBranch=HEAD" -X "github.com/pingcap/tidb/util/versioninfo.TiDBEdition=Community" ' -o bin/tidb-server ./tidb-serverBuild TiDB Server successfully!

查看二进制文件的版本:

[shawnyan@centos7 bin]$ ./tidb-server -VRelease Version: v7.5.0-alphaEdition: CommunityGit Commit Hash: 8cfe7f329b56899a96422596da2b67d4e2bd1e94Git Branch: HEADUTC Build Time: 2023-10-11 06:08:32GoVersion: go1.21.3Race Enabled: falseCheck Table Before Drop: falseStore: unistore

(Update: 2023-10-16)

TiDB 仓库的代码结构发生了大调整,TiDB Server 核心文件移动到了新目录 pkg (https://github.com/pingcap/tidb/pull/47123),这一变更影响到近 4500 个文件。随之而来的好处是,TiDB 源码根目录更加清晰。

[shawnyan@centos7 tidb7]$ tree . -L 1.├── br --> BR├── build...├── cmd...├── docs├── dumpling --> Dumpling...├── pkg --> TiDB core...├── tests├── tools...10 directories, 24 files

1.3 启动TiDBServer

TiDB Server 其实可以不依赖于 TiKV 而单独启动,这里选择单机存储引擎 UniStore 启动 TiDB Server,启动命令如下。

./tidb-server -store unistore

启动后,连接 TiDB,并查看版本信息。

tidb> select tidb_version()\G*************************** 1. row ***************************tidb_version(): Release Version: v7.5.0-alphaEdition: CommunityGit Commit Hash: 8cfe7f329b56899a96422596da2b67d4e2bd1e94Git Branch: HEADUTC Build Time: 2023-10-11 06:08:32GoVersion: go1.21.3Race Enabled: falseCheck Table Before Drop: falseStore: unistore1 row in set (0.00 sec)

需要注意的是,TiDB Server 的参数分为命令行参数(直接启动 Server 时传递的参数,配置文件参数(比命令行参数更丰富),以及系统变量(连接 TiDB 后可修改),所以在查看官方文档的时候,这三类参数的页面都可能用到,概念上的变量和参数非常容易混淆,如果接触 TiDB 时间不长,需要多加区分、辨别。

● BTW,关于这部分的内容,欢迎学习、复习 PingCAP 相关课程:

TiDB 系统管理基础 [TiDB v5.x] (301) (https://learn.pingcap.com/learner/course/30002),第十课: TiDB 的配置

到此,我们可以看到 TiDB Server 已经编译成功,并成功启动运行,TiDB Server 的版本为 v7.5.0-alpha 。

TiDB Server v7.x 新特性

依据现行 TiDB 发版规则,TiDB 7.5.0 LTS 版本将包含 7.2.0-DMR (Released: 2023-06-29),7.3.0-DMR (Released: 2023-08-14) 和 7.4.0-DMR (Released: 2023-10-12) 中已发布的新特性。下面的篇幅将介绍若干 TiDB 7.x 的新特性。

2.1 资源管控能力增强

在 TiDB 7.1.0 LTS 中,资源管控特性正式发布,这部分的详细内容请参考文章: 《TiDB 7.1.0 LTS 特性解读 | 资源管控 (Resource Control) 应该知道的 6 件事》

在 TiDB 7.4.0 DMR 中,资源管控能力得到增强,引入了对后台任务的管理。主要实现在 TiKV 层。

当一种任务被标记为后台任务时,TiKV 会动态地限制该任务的资源使用,以尽量避免此类任务在执行时对其他前台任务的性能产生影响。TiKV 通过实时地监测所有前台任务所消耗的 CPU 和 IO 等资源,并根据实例总的资源上限计算出后台任务可使用的资源阈值,所有后台任务在执行时会受此阈值的限制。

同时,在 v7.4.0 中,TiFlash 支持资源管控特性,完善了 TiDB 整体的资源管控能力。

2.2TiDB相关SQL再扩展

之前的文章 《TiDB 7.1.0 LTS 特性解读 | 资源管控 (Resource Control) 应该知道的 6 件事》 中,增加了“资源管控”相关 SQL,这里再次进行扩展,也是本文的第一个彩蛋。

TiDB7.1.0,新增支持 Fix Control 特性

从 TiDB v7.1.0 开始,支持 Optimizer Fix Controls 特性,并引入 tidb_opt_fix_control 系统变量,以更细粒度控制优化器行为。

现在,该变量支持全局、会话、Hint,三种方式进行控制,正式发布支持的控制项有 6 个,另有 1 个已合入 Master,预计会随下个版本发布,具体列表如下。

  • 44262 -- New in v7.2.0/v7.1.1
  • 控制是否允许使用动态模式访问没有全局统计信息的分区表。

  • 44389 -- New in v7.2.0/v7.1.1
  • 控制在构建范围时是否考虑某些 CNF 项的非点范围(non-point ranges)。

  • 44823 -- New in v7.3.0/v7.1.1
  • 控制可以在计划缓存中缓存的查询参数的最大数量。

  • 44830 -- New in v7.3.0
  • 控制是否允许缓存某些复杂场景中的 Batch/PointGet。

  • 44855 -- New in v7.3.0/v7.1.1
  • 控制在估计索引连接内侧下索引范围扫描的行数时是否使用更准确的上限。

  • 45132 -- New in v7.4.0
  • 控制是否使用访问范围行计数来确定 Skyline 修剪上的访问路径。

  • 45798 -- New in v7.5.0 ??? TBD
  • 控制是否缓存访问生成列的计划。

基础用法示例如下:

SET tidb_opt_fix_control;SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON,44823:500,44830:ON,44855:ON,45132:0,45798:ON';SET GLOBAL tidb_opt_fix_control = '';select /*+ set_var(tidb_opt_fix_control="1:ok") */ @@tidb_opt_fix_control;

TiDB7.2.0,对DDL任务进行暂停和恢复

TiDB 7.2 引入了新的实验特性,DDL 任务支持暂停(PAUSE)(https://docs.pingcap.com/zh/tidb/dev/sql-statement-admin-pause-ddl)和恢复(RESUME)操作,比如,对正在创建索引的任务进行暂停和恢复。相关命令如下:

ADMIN PAUSE DDL JOBS job_id [, job_id]ADMIN RESUME DDL JOBS job_id [, job_id]

TiDB7.3.0,新增支持 8 项 Optimizer Hint

从 TiDB 7.3.0 开始,新增支持 8 (4+1+3) 项表级别 Optimizer Hint,这一特性也在 TiDB v7.1.1 中引入。

“4+1+3” 的意思是,增加 4 个名为 NO_xxx_JOIN 的 TiDB Hint,兼容(MySQL)一个名为 NO_HASH_JOIN 的 Hint,以及,增加 3 个名为 INDEX_xxx_JOIN 的 TiDB Hint,具体名称如下。

NO_INDEX_JOINNO_INDEX_HASH_JOINNO_INDEX_MERGE_JOINNO_MERGE_JOINNO_HASH_JOININDEX_JOININDEX_HASH_JOININDEX_MERGE_JOIN

此外,在使用 Hint 时,如果 INDEX_xxx_JOIN 与 NO_INDEX_xxx_JOIN 发生冲突, NO_INDEX_xxx_JOIN 可能会被忽略。

另外一个知识点,在 TiDB 中, TIDB_INLJ 是 INL_JOIN 的别名。

在 3.0.x 及之前版本仅支持使用该别名;之后的版本同时支持使用这两种名称,但推荐使用 INL_JOIN 。

// TiDB hint aliases"TIDB_HJ": hintHashJoin, -> HASH_JOIN"TIDB_INLJ": hintInlJoin, -> INL_JOIN"TIDB_SMJ": hintSMJoin, -> MERGE_JOIN

在使用方法上,还可以结合 SEV_VAR Hint 使用,本文下面有章节会再介绍。

示例:

explain format = 'hint' SELECT /*+ NO_INDEX_JOIN(t1),NO_INDEX_HASH_JOIN(t1),NO_INDEX_MERGE_JOIN(t1),NO_MERGE_JOIN(t1),NO_HASH_JOIN(t1),INDEX_JOIN(t1),INDEX_HASH_JOIN(t1),INDEX_MERGE_JOIN(t1) */ * FROM t1\G

输出:

mysql> explain format = 'hint' SELECT /*+ NO_INDEX_JOIN(t1),NO_INDEX_HASH_JOIN(t1),NO_INDEX_MERGE_JOIN(t1),NO_MERGE_JOIN(t1) ,NO_HASH_JOIN(t1),INDEX_JOIN(t1),INDEX_HASH_JOIN(t1),INDEX_MERGE_JOIN(t1) */ * FROM t1\G*************************** 1. row ***************************hint: use_index(@`sel_1` `test`.`t1` `idx_t1`), no_order_index(@`sel_1` `test`.`t1` `idx_t1`), no_index_join(), no_index_hash_join(), no_index_merge_join(), no_merge_join(), no_hash_join(), index_join(), index_hash_join(), index_merge_join()1 row in set (0.00 sec)

相关 PR 参见: parser: support more join hints o n parser #45525(https://github.com/pingcap/tidb/pull/45525)

具体相关文档参见: Optimizer Hints(https://docs.pingcap.com/zh/tidb/dev/optimizer-hints)

TiDB7.4.0,新增支持TIDB_PARSE_TSO_LOGICAL()语法

对于 TSO,如果想查看逻辑计数器,之前的版本需要通过 pd 命令进行解析,从 7.4 开始支持直接从 TiDB 进行查询。

TSO 指 Time Stamp Oracle,是 PD (Placement Driver) 为每个事务提供的单调递增的时间戳。TSO 是一串数字,包含以下两部分:一个物理时间戳;一个逻辑计数器 (https://docs.pingcap.com/zh/tidb/stable/tidb-functions#tidb_parse_tso )

示例:获取物理时间戳和逻辑计数器的值。

tidb> select tidb_current_ts |+--------------------+| 444995429049565185 |+--------------------+1 row in set (0.00 sec)tidb> SELECT TIDB_PARSE_TSO(tidb_current_ts) |+-----------------------------------+| 2023-10-17 15:07:26.411000 |+-----------------------------------+1 row in set (0.00 sec)tidb> SELECT TIDB_PARSE_TSO_LOGICAL(tidb_current_ts) |+-------------------------------------------+| 1 |+-------------------------------------------+1 row in set (0.00 sec)

与 pd 命令解析的结果一致。

tidb> \! tiup ctl:v7.4.0 pd tso 444995429049565185The component `ctl` version v7.4.0 is not installed; downloading from repository.Starting component `ctl`: /home/shawnyan/.tiup/components/ctl/v7.4.0/ctl pd tso 444995429049565185system: 2023-10-17 15:07:26.411 +0800 CSTlogic: 1tidb>

TiDB7.4.0,新增支持分区类型管理功能

TiDB 7.4 的分区表管理功能更加完备,期待已久的普通表转分区表功能终于上线。(https://docs.pingcap.com/zh/tidb/v7.4/partitioned-table#对现有表进行分区 )

-- 将非分区表转为分区表、修改分区表的分区类型ALTER TABLE

PARTITION BY

-- 将分区表转为非分区表ALTER TABLE

REMOVE PARTITIONING

举个栗子,将既存表按年龄划定分区,分区类型使用 RANGE ,然后将分区类型变更为 LIST ,最后移除分区。

tidb> show create table t_age\G*************************** 1. row *************************** Table: t_ageCreate Table: CREATE TABLE `t_age` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin1 row in set (0.00 sec)
-- 转为分区表tidb> ALTER TABLE t_age PARTITION BY RANGE (a) -> ( PARTITION p0 VALUES LESS THAN (18) -> , PARTITION p1 VALUES LESS THAN (35) -> , PARTITION p2 VALUES LESS THAN (MAXVALUE));Query OK, 0 rows affected, 1 warning (0.11 sec)
tidb> show create table t_age\G*************************** 1. row *************************** Table: t_ageCreate Table: CREATE TABLE `t_age` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_binPARTITION BY RANGE (`a`)(PARTITION `p0` VALUES LESS THAN (18),PARTITION `p1` VALUES LESS THAN (35),PARTITION `p2` VALUES LESS THAN (MAXVALUE))1 row in set (0.00 sec)
-- 分区定义从 RANGE 变更为 LISTtidb> ALTER TABLE t_age PARTITION BY LIST (a) -> ( PARTITION p0 VALUES IN (18) -> , PARTITION p1 VALUES IN (35) -> , PARTITION p2 VALUES IN (65));Query OK, 0 rows affected, 1 warning (0.12 sec)
tidb> show create table t_age\G*************************** 1. row *************************** Table: t_ageCreate Table: CREATE TABLE `t_age` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_binPARTITION BY LIST (`a`)(PARTITION `p0` VALUES IN (18),PARTITION `p1` VALUES IN (35),PARTITION `p2` VALUES IN (65))1 row in set (0.00 sec)
-- 移除分区tidb> alter table t_age remove partitioning;Query OK, 0 rows affected (0.10 sec)
tidb> show create table t_age\G*************************** 1. row *************************** Table: t_ageCreate Table: CREATE TABLE `t_age` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin1 row in set (0.00 sec)

!!! Tips 提示:

在分区表定义更新后,建议手动更新统计信息(有些环境可能已经关闭自动更新 )。

2.3MySQL 8.0兼容性

在 PingCAP 公众号最近发布的通告中,TiDB 7.4 发版:正式兼容 MySQL 8.0,详细地介绍了 TiDB 7.4 DMR 在 MySQL 8.0 兼容性方面取得的最新进展。通告中已经列举了若干新特性,本文将做进一步补充。同时,在 TiDB 7.4 DMR 的发版说明中有些小改动并未列出,下面也将进行列举说明,以供参考。

TiDB7.2.0,新增支持CHECK约束

从 MySQL 8.0.16 开始,MySQL 实现了 CHECK 约束核心特性,并增加了新的信息表 INFORMATION_SCHEMA.CHECK_CONSTRAINTS 用来展示 CHECK 约束定义。(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-16.html)

从 TiDB 7.2.0 开始,TiDB 新增支持 CHECK 约束,并在 7.4 中增加表 I_S.CHECK_CONSTRAINTS 。需要注意的是,该功能默认关闭,需要通过变量 tidb_enable_check_constraint 进行控制。相关 SQL 控制命令如下:

-- 启用 CHECK 约束功能SET GLOBAL tidb_enable_check_constraint=ON;
-- 添加约束ALTER TABLE t ADD CONSTRAINT CHECK (1 < a);ALTER TABLE t ADD CONSTRAINT CHECK (1 < a) NOT ENFORCED;
-- 删除约束ALTER TABLE t DROP CONSTRAINT t_chk_1;
-- 启用约束ALTER TABLE t ALTER CONSTRAINT t_chk_1 ENFORCED;
-- 禁用约束ALTER TABLE t ALTER CONSTRAINT t_chk_1 NOT ENFORCED;

Ps. 在测试该特性时遇到了两个问题,分别提了 Issue,期待在 TiDB 7.5.0 LTS 代码冻结之前修复。

● [Closed] CHECK CONSTRAINT loss when ENFORCED again #47567 (https://github.com/pingcap/tidb/issues/47567)

● [Open] Support TABLE_NAME in CHECK_CONSTRAINTS #47565 (https://github.com/pingcap/tidb/issues/47565)

TiDB7.2.0,支持指定utf8mb3字符集;TiDB 7.4.0,支持指定utf8mb4_0900_ai_ci/utf8mb4_0900_bin排序规则

在之前的文章中,TiDB 6.x 新特性解读 | Collation 规则,介绍过 TiDB 的字符集和排序规则,经过若干版本的迭代,TiDB 在全面兼容 MySQL 8.0 的征途上又更进一步。

从 TiDB 7.2.0 开始,支持 utf8mb3 字符集,其作为 utf8 的别名。示例如下:

tidb> create table t_utf8 (a int) charset=utf8;Query OK, 0 rows affected (0.02 sec)
tidb> create table t_utf8mb3 (a int) charset=utf8mb3;Query OK, 0 rows affected (0.04 sec)
tidb> show create table t_utf8\G*************************** 1. row *************************** Table: t_utf8Create Table: CREATE TABLE `t_utf8` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin1 row in set (0.00 sec)
tidb> show create table t_utf8mb3\G*************************** 1. row *************************** Table: t_utf8mb3Create Table: CREATE TABLE `t_utf8mb3` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin1 row in set (0.00 sec)

从 TiDB 7.4.0 开始,支持指定 utf8mb4_0900_ai_ci/utf8mb4_0900_bin 排序规则,在 7.4.0 的发版说明中有这样一段描述 (https://docs.pingcap.com/zh/tidb/v7.4/release-7.4.0#数据库管理 ):

TiDB v7.4.0 增强了从 MySQL 8.0 迁移数据的支持。新增两个排序规则 (Collation) utf8mb4_0900_ai_ci 和 utf8mb4_0900_bin 。其中 utf8mb4_0900_ai_ci 为 MySQL 8.0 的默认排序规则。同时新增支持 MySQL 8.0 兼容的系统变量 default_collation_for_utf8mb4 ,允许用户为 utf8mb4 字符集指定默认的排序方式,以兼容从 MySQL 5.7 或之前版本迁移或数据复制的场景。

这里需要注意的是,在 TiDB 中,utf8mb4 字符集的默认排序规则仍然是 utf8mb4_bin 。

tidb> select default_collation_for_utf8mb4 |+---------------------------------+| utf8mb4_bin |+---------------------------------+1 row in set (0.00 sec)

做个对照实验,更加直观地展示区别:

TiDB7.4.0,version()返回信息变更

自 v7.4.0 起,TiDB 已经兼容 MySQL 8.0 的核心功能, version() 将返回以 8.0.11 为前缀的版本信息。

示例:

tidb> select version();+--------------------------+| version() |+--------------------------+| 8.0.11-TiDB-v7.5.0-alpha |+--------------------------+1 row in set (0.00 sec)

当然,如果为了合理规划漏扫,也可以自定义将 8.0.11 改为更新的版本,比如 8.0.35 ,修改方法参照官方文档 (https://docs.pingcap.com/zh/tidb/stable/high-reliability-faq#我们的安全漏洞扫描工具对-mysql-version-有要求 tidb-是否支持修改-server-版本号呢 )。

关于 TiDB 兼容 MySQL 8.0 的更多讨论,欢迎访问 AskTUG 论坛:【唠嗑茶话会 88】关于 TiDB 兼容 MySQL 8.0 ,你最想支持的特性/功能是什么?(https://asktug.com/t/topic/1013682)

TiDB7.4.0,新增支持使用 HintSER_VAR()修改系统变量

TiDB v7.4.0 新增支持与 MySQL 8.0 相似的优化器提示 SET_VAR() 。通过在 SQL 语句中添加 Hint SET_VAR() ,可以在语句运行过程中临时修改部分系统变量,以针对不同语句设置环境。

举个栗子,在之前的版本中,如果想控制当前 Session 只从 TiFlash 读取数据,需要用到下面的语句:

set session tidb_isolation_read_engines = "tiflash";select count(*) from t;

或者:

select /*+ read_from_storage(tiflash[t]) */ count(*) from t;

而从 TiDB 7.4.0 开始,可以使用 SET_VAR() 语法进行控制,更加灵活、便利:

select /*+ set_var(tidb_isolation_read_engines=tiflash) */ count(*) from t;

从 TiDB 7.4 开始,官方文档的系统变量部分增加一个说明项“是否受 Hint SET_VAR 控制”,当前版本中,受该 Hint SET_VAR 控制的系统变量共有 91 个(具体内容请参考官方文档)。

TiDB7.4.0, 新增会话连接属性表session_account_connect_attrs

在 MySQL 早期版本中,支持从 P_S.session_account_connect_attrs 查看会话的连接属性(https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html)。

在 TiDB 7.4 中,也已经实现。举例如下:

tidb> select * from performance_schema.session_account_connect_attrs;+----------------+-----------------+-------------+------------------+| PROCESSLIST_ID | ATTR_NAME | ATTR_VALUE | ORDINAL_POSITION |+----------------+-----------------+-------------+------------------+| 2097154 | _client_name | libmysql | 0 || 2097154 | _client_version | 8.0.33 | 1 || 2097154 | _os | Linux | 2 || 2097154 | _pid | 103036 | 3 || 2097154 | _platform | x86_64 | 4 || 2097154 | os_user | shawnyan | 5 || 2097154 | program_name | mysql | 6 |+----------------+-----------------+-------------+------------------+7 rows in set (0.00 sec)

如果通过第三方工具连接,比如 HeidiSQL,则显示为:

tidb> select * from performance_schema.session_account_connect_attrs where PROCESSLIST_ID = '2097170';+----------------+-----------------+------------+------------------+| PROCESSLIST_ID | ATTR_NAME | ATTR_VALUE | ORDINAL_POSITION |+----------------+-----------------+------------+------------------+| 2097170 | _client_name | libmariadb | 0 || 2097170 | _client_version | 3.2.5 | 1 || 2097170 | _os | Windows | 2 || 2097170 | _pid | 3828 | 3 || 2097170 | _platform | AMD64 | 4 || 2097170 | _server_host | 127.0.0.1 | 5 || 2097170 | _thread | 18236 | 6 || 2097170 | program_name | HeidiSQL | 7 |+----------------+-----------------+------------+------------------+8 rows in set (0.00 sec)

TiDB7.4.0, 新增支持数据类型FLOAT4,FLOAT8MIDDLEINT

从 TiDB 7.4 开始,新增数据类型 FLOAT4 , FLOAT8 和 MIDDLEINT ,以增强 MySQL 兼容性。其中 FLOAT4 实现为 FLOAT 的别名, FLOAT8 实现为 DOUBLE 的别名, MIDDLEINT 实现为 MEDIUMINT 的别名。

示例:

create table t_type (c1 float4, c2 float8, c3 middleint, c4 int3);)tidb> show create table t_type\G*************************** 1. row *************************** Table: t_typeCreate Table: CREATE TABLE `t_type` ( `c1` float DEFAULT NULL, `c2` double DEFAULT NULL, `c3` mediumint(9) DEFAULT NULL, `c4` mediumint(9) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin1 row in set (0.00 sec)

到此,MySQL 8.1 官方文档 (https://dev.mysql.com/doc/refman/8.1/en/other-vendor-data-types.html)中罗列的 16 个来自其他数据库的数据类型,TiDB 7.4 已全部支持。

总结

到 11 月 15 日,2023 年已过去 87%,TiDB 7.x 系列即将迎来 7.5 LTS 版本。TiDB 在 MySQL 5.7 EOL 之际正式兼容 MySQL 8.0,为用户从 MySQL 5.7 迁移到 TiDB 减轻了工作量,并提供了更多助力。

最后,推荐一篇文章:

是 时候了!MySQL 5.7 的下一站,不如试试 TiDB?

感谢

在 TiDB 7.4.0 DMR 的 发版说明 (https://docs.pingcap.com/zh/tidb/v7.4/release-7.4.0#贡献者 )中发现了自己的名字,感谢 TiDB 社区。

欢迎更多伙伴加入 TiDB 社区。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

经济观察报
2024-06-15 19:56:17
网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

网传南方医科大学老师因救人导致上课迟到,被留学生举报后,遭学校罚款+通报批评

可达鸭面面观
2024-06-16 10:28:07
幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

赢梯
2024-06-13 09:43:08
莫斯科外汇交易所停止美元交易后,人民币和美元汇率翻天覆地

莫斯科外汇交易所停止美元交易后,人民币和美元汇率翻天覆地

火星宏观
2024-06-16 06:00:03
港媒:美军核潜艇并不是“撞山”,而是被解放军发现后“伏击”!

港媒:美军核潜艇并不是“撞山”,而是被解放军发现后“伏击”!

黑天鹅洞察
2024-06-14 11:51:11
31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

31岁河南禹州市医保局局长任小龙,拟遴选进入省政府办公厅

澎湃新闻
2024-06-15 21:58:28
倒查30年后补税是个危险信号

倒查30年后补税是个危险信号

深度财线
2024-06-15 22:03:47
魔怔了?美国洛杉矶移除“禁止转弯”交通标志,因涉嫌歧视“弯的”

魔怔了?美国洛杉矶移除“禁止转弯”交通标志,因涉嫌歧视“弯的”

不掉线电波
2024-06-16 09:33:45
乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

红星新闻
2024-06-15 20:16:15
红色预警!大暴雨!浙江入梅后最强降水来袭

红色预警!大暴雨!浙江入梅后最强降水来袭

鲁中晨报
2024-06-16 10:19:06
中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

理工男评篮球
2024-06-15 23:27:43
东莞茶山教育管理中心主任文辉被查,已有同僚落马

东莞茶山教育管理中心主任文辉被查,已有同僚落马

南方都市报
2024-06-16 10:56:09
疯传!女员工表白大20岁副行长,言语肉麻发错群,银行回应来了

疯传!女员工表白大20岁副行长,言语肉麻发错群,银行回应来了

懂瓜瓜
2024-06-15 20:12:37
你是不是想死?奔驰车主棍打女骑手,真实身份被扒,评论区沸腾了

你是不是想死?奔驰车主棍打女骑手,真实身份被扒,评论区沸腾了

刚哥说法365
2024-06-16 02:52:08
【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

【史话】张国焘说长征:毛泽东等北上抗日只是幌子,想逃跑才是真

年之父
2024-06-16 06:10:02
16岁的暑假班!亚马尔生吃格瓦迪奥尔、1v4、带作业到德国做✍️

16岁的暑假班!亚马尔生吃格瓦迪奥尔、1v4、带作业到德国做✍️

直播吧
2024-06-16 10:40:12
湖南省辰溪县中医医院原党支部书记、院长傅胜义接受纪律审查和监察调查

湖南省辰溪县中医医院原党支部书记、院长傅胜义接受纪律审查和监察调查

鲁中晨报
2024-06-16 10:59:05
大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

大陆不再沉默,给黄仁勋上了一课,选在美收紧对华AI芯片出口之际

陈菲副教授
2024-06-15 18:20:03
俄空军遭遇滑铁卢,单日8架战机被毁伤,乌克兰粮食出口创新高

俄空军遭遇滑铁卢,单日8架战机被毁伤,乌克兰粮食出口创新高

史政先锋
2024-06-15 21:05:23
漫天狂嘘!欧洲杯第1场催眠大战:2-1领先不攻了,球迷愤怒

漫天狂嘘!欧洲杯第1场催眠大战:2-1领先不攻了,球迷愤怒

叶青足球世界
2024-06-16 04:58:35
2024-06-16 11:42:44
PingCAP
PingCAP
分布式数据库TiDB背后团队
484文章数 622关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

艺术
健康
教育
手机
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

晚餐不吃or吃七分饱,哪种更减肥?

教育要闻

四川卫视#四川卫视腹有诗书#“不积硅步,无以至千里,不积小流,无以成江海”,“成电”青年创新团队努力...

手机要闻

哥伦比亚手机市场分析:三星第一不保,小米排名第二

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版