关键字挖掘爱站网,迪庆州建设局网站,wordpress后台慢的问题,小说网站建设方案书本文将介绍如何编译 TiDB Server 源码。以及阐释 TiDB Server 7.x 的部分新特性。
TiDB v7.5.0 LTS 计划于 2023 年 11 月正式 Release#xff0c;目前代码虽未冻结#xff0c;但已经可以看到 Alpha 版本的 Code 了#xff0c;本文代码将以 v7.5.0-alpha 为基准。
TiDB Se… 本文将介绍如何编译 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-release
uname -a
输出日志
● CentOS 7
[shawnyancentos7 ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[shawnyancentos7 ~]$ uname -a
Linux 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
[rootrocky9 ~]# cat /etc/redhat-release
Rocky Linux release 9.2 (Blue Onyx)
[rootrocky9 ~]# uname -a
Linux 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.3latest
go1.21.3 download
go1.21.3 version
go 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 --depth1 -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) SeaRise
编译 TiDB Server 仅需一条命令搞定。
make
输出日志
[shawnyancentos7 tidb7]$ make
CGO_ENABLED1 GO111MODULEon go build -tags codes -ldflags -X github.com/pingcap/tidb/parser/mysql.TiDBReleaseVersionv7.5.0-alpha -X github.com/pingcap/tidb/util/versioninfo.TiDBBuildTS2023-10-11 06:08:32 -X github.com/pingcap/tidb/util/versioninfo.TiDBGitHash8cfe7f329b56899a96422596da2b67d4e2bd1e94 -X github.com/pingcap/tidb/util/versioninfo.TiDBGitBranchHEAD -X github.com/pingcap/tidb/util/versioninfo.TiDBEditionCommunity -o bin/tidb-server ./tidb-server
Build TiDB Server successfully!
查看二进制文件的版本
[shawnyancentos7 bin]$ ./tidb-server -V
Release Version: v7.5.0-alpha
Edition: Community
Git Commit Hash: 8cfe7f329b56899a96422596da2b67d4e2bd1e94
Git Branch: HEAD
UTC Build Time: 2023-10-11 06:08:32
GoVersion: go1.21.3
Race Enabled: false
Check Table Before Drop: false
Store: unistore
Update: 2023-10-16
TiDB 仓库的代码结构发生了大调整TiDB Server 核心文件移动到了新目录 pkg ( https://github.com/pingcap/tidb/pull/47123 )这一变更影响到近 4500 个文件。随之而来的好处是TiDB 源码根目录更加清晰。
[shawnyancentos7 tidb7]$ tree . -L 1
.
├── br -- BR
├── build
...
├── cmd
...
├── docs
├── dumpling -- Dumpling
...
├── pkg -- TiDB core
...
├── tests
├── tools
...10 directories, 24 files
1.3 启动 TiDB Server
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-alpha
Edition: Community
Git Commit Hash: 8cfe7f329b56899a96422596da2b67d4e2bd1e94
Git Branch: HEAD
UTC Build Time: 2023-10-11 06:08:32
GoVersion: go1.21.3
Race Enabled: false
Check Table Before Drop: false
Store: unistore
1 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.2 TiDB 相关 SQL 再扩展
之前的文章 《 TiDB 7.1.0 LTS 特性解读 | 资源管控 (Resource Control) 应该知道的 6 件事 》 中增加了“资源管控”相关 SQL这里再次进行扩展也是本文的第一个彩蛋。
① TiDB 7.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_controldefault;
select 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_control1:ok) */ tidb_opt_fix_control;
② TiDB 7.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]
③ TiDB 7.3.0新增支持 8 项 Optimizer Hint
从 TiDB 7.3.0 开始新增支持 8 (413) 项表级别 Optimizer Hint这一特性也在 TiDB v7.1.1 中引入。
“413” 的意思是增加 4 个名为 NO_xxx_JOIN 的 TiDB Hint兼容MySQL一个名为 NO_HASH_JOIN 的 Hint以及增加 3 个名为 INDEX_xxx_JOIN 的 TiDB Hint具体名称如下。
NO_INDEX_JOIN
NO_INDEX_HASH_JOIN
NO_INDEX_MERGE_JOIN
NO_MERGE_JOINNO_HASH_JOININDEX_JOIN
INDEX_HASH_JOIN
INDEX_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
④ TiDB 7.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;
--------------------
| tidb_current_ts |
--------------------
| 444995429049565185 |
--------------------
1 row in set (0.00 sec)tidb SELECT TIDB_PARSE_TSO(tidb_current_ts);
-----------------------------------
| 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);
-------------------------------------------
| TIDB_PARSE_TSO_LOGICAL(tidb_current_ts) |
-------------------------------------------
| 1 |
-------------------------------------------
1 row in set (0.00 sec)
与 pd 命令解析的结果一致。
tidb \! tiup ctl:v7.4.0 pd tso 444995429049565185
The 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 444995429049565185
system: 2023-10-17 15:07:26.411 0800 CST
logic: 1
tidb
⑤ TiDB 7.4.0新增支持分区类型管理功能
TiDB 7.4 的分区表管理功能更加完备期待已久的普通表转分区表功能终于上线。( https://docs.pingcap.com/zh/tidb/v7.4/partitioned-table#对现有表进行分区 )
-- 将非分区表转为分区表、修改分区表的分区类型
ALTER TABLE table_name PARTITION BY new partition type and definitions-- 将分区表转为非分区表
ALTER TABLE table_name REMOVE PARTITIONING
举个栗子将既存表按年龄划定分区分区类型使用 RANGE 然后将分区类型变更为 LIST 最后移除分区。
tidb show create table t_age\G
*************************** 1. row ***************************Table: t_age
Create Table: CREATE TABLE t_age (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin
1 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_age
Create Table: CREATE TABLE t_age (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin
PARTITION 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 变更为 LIST
tidb 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_age
Create Table: CREATE TABLE t_age (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin
PARTITION 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_age
Create Table: CREATE TABLE t_age (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin
1 row in set (0.00 sec)
!!! Tips 提示
在分区表定义更新后建议手动更新统计信息有些环境可能已经关闭自动更新 。
2.3 MySQL 8.0 兼容性
在 PingCAP 公众号最近发布的通告中 TiDB 7.4 发版正式兼容 MySQL 8.0 详细地介绍了 TiDB 7.4 DMR 在 MySQL 8.0 兼容性方面取得的最新进展。通告中已经列举了若干新特性本文将做进一步补充。同时在 TiDB 7.4 DMR 的发版说明中有些小改动并未列出下面也将进行列举说明以供参考。
① TiDB 7.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_constraintON;
-- 添加约束
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 )
② TiDB 7.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) charsetutf8;
Query OK, 0 rows affected (0.02 sec)
tidb create table t_utf8mb3 (a int) charsetutf8mb3;
Query OK, 0 rows affected (0.04 sec)
tidb show create table t_utf8\G
*************************** 1. row ***************************Table: t_utf8
Create Table: CREATE TABLE t_utf8 (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin
1 row in set (0.00 sec)
tidb show create table t_utf8mb3\G
*************************** 1. row ***************************Table: t_utf8mb3
Create Table: CREATE TABLE t_utf8mb3 (a int(11) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin
1 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;
---------------------------------
| default_collation_for_utf8mb4 |
---------------------------------
| utf8mb4_bin |
---------------------------------
1 row in set (0.00 sec)
做个对照实验更加直观地展示区别 ③ TiDB 7.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 )
④ TiDB 7.4.0新增支持使用 Hint SER_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_enginestiflash) */ count(*) from t;
从 TiDB 7.4 开始官方文档的系统变量部分增加一个说明项“是否受 Hint SET_VAR 控制”当前版本中受该 Hint SET_VAR 控制的系统变量共有 91 个具体内容请参考官方文档。
⑤ TiDB 7.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)
⑥ TiDB 7.4.0, 新增支持数据类型 FLOAT4 , FLOAT8 和 MIDDLEINT
从 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_type
Create Table: CREATE TABLE t_type (c1 float DEFAULT NULL,c2 double DEFAULT NULL,c3 mediumint(9) DEFAULT NULL,c4 mediumint(9) DEFAULT NULL
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin
1 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 社区。