https://docs.pingcap.com/zh/tidb/stable/tidb-control

TiDB Control 是 TiDB 的命令行工具,用于获取 TiDB 状态信息,多用于调试。本文介绍了 TiDB Control 的主要功能和各个功能的使用方法。

 
注意

TiDB Control 主要用于诊断调试,不保证和 TiDB 未来引入的新特性完全兼容。因此不推荐客户在应用程序开发或工具开发中利用 TiDB Control 获取结果。

获取 TiDB Control

本节提供了两种方式获取 TiDB Control 工具。

 
注意

建议使用的 Control 工具版本与集群版本保持一致。

通过 TiUP 安装

在安装 TiUP 之后,可以使用 tiup ctl:v<CLUSTER_VERSION> tidb 命令来获取 TiDB Control 的二进制程序以及运行 TiDB Control。

从源代码编译安装

编译环境要求:Go 1.20 或以上版本

编译步骤:在 TiDB Control 项目根目录,使用 make 命令进行编译,生成 tidb-ctl。

编译文档:帮助文档在 doc 文件夹下,如丢失或需要更新,可通过 make doc 命令生成帮助文档。

使用介绍

tidb-ctl 的使用由命令(包括子命令)、选项和参数组成。命令即不带 - 或者 -- 的字符,选项即带有 - 或者 -- 的字符,参数即命令或选项字符后紧跟的传递给命令和选项的字符。

如:tidb-ctl schema in mysql -n db

  • schema: 命令
  • in: schema 的子命令
  • mysql: in 的参数
  • -n: 选项
  • db: -n 的参数

目前,TiDB Control 包含以下子命令。

  • tidb-ctl base64decode 用于 BASE64 解码
  • tidb-ctl decoder 用于 KEY 解码
  • tidb-ctl etcd 用于操作 etcd
  • tidb-ctl log 用于格式化日志文件,将单行的堆栈信息展开
  • tidb-ctl mvcc 用于获取 MVCC 信息
  • tidb-ctl region 用于获取 Region 信息
  • tidb-ctl schema 用于获取 Schema 信息
  • tidb-ctl table 用于获取 Table 信息

获取帮助

tidb-ctl -h/--help 用于获取帮助信息。tidb-ctl 由多层命令组成,tidb-ctl 及其所有子命令都可以通过 -h/--help 来获取使用帮助。

以获取 Schema 信息为例:

通过 tidb-ctl schema -h 可以获取这个子命令的使用帮助。schema 有两个子命令——in 和 tid。in 用来通过数据库名获取数据库中所有表的表结构,tid 用来通过全数据库唯一的 table_id 获取表的表结构。

全局参数

tidb-ctl 有 4 个与连接相关的全局参数,分别为:

  • --host TiDB 服务地址
  • --port TiDB status 端口
  • --pdhost PD 服务地址
  • --pdport PD 服务端口
  • --ca 连接使用的 TLS CA 文件路径
  • --ssl-key 连接使用的 TLS 密钥文件路径
  • --ssl-cert 连接使用的 TLS 证书文件路径

其中 --pdhost 和 --pdport 主要是用于 etcd 子命令,例如:tidb-ctl etcd ddlinfo。如不添加地址和端口将使用默认值,TiDB/PD 服务默认的地址是 127.0.0.1(服务地址只能使用 IP 地址),TiDB 服务端口默认的端口是 10080,PD 服务端口默认的端口是 2379 连接选项是全局选项,适用于以下所有命令。

schema 命令

in 子命令

in 子命令用来通过数据库名获取数据库中所有表的表结构。

tidb-ctl schema in {数据库名}

如:tidb-ctl schema in mysql 将得到以下结果

[ { "id": 13, "name": { "O": "columns_priv", "L": "columns_priv" }, ... "update_timestamp": 399494726837600268, "ShardRowIDBits": 0, "Partition": null } ]

结果将以 json 形式展示,内容较长,这里做了截断。

如希望指定表名,可以使用 tidb-ctl schema in {数据库名} -n {表名} 进行过滤。

如:tidb-ctl schema in mysql -n db 将得到 mysql 库中 db 表的表结构。结果如下:

{ "id": 9, "name": { "O": "db", "L": "db" }, ... "Partition": null }

这里同样做了截断。

如使用的 TiDB 地址不为默认地址和端口,可以使用命令行参数 --host--port 选项,如:tidb-ctl --host 172.16.55.88 --port 8898 schema in mysql -n db

tid 子命令

tid 子命令用来通过表的 id 获取数据库中表的表结构。

通过使用 in 子命令查询到数据库中表的 id,之后可以通过 tid 子命令查看表的详细信息。

例如,查询到 mysql.stat_meta 表的 id 是 21,可以通过 tidb-ctl schema tid -i 21 查看表的详细信息。

{ "id": 21, "name": { "O": "stats_meta", "L": "stats_meta" }, "charset": "utf8mb4", "collate": "utf8mb4_bin", ... }

同 in 子命令一样,如果使用的 TiDB 地址不是默认的地址和端口,需要通过 --host 和 --port 参数指定 TiDB 的地址和 status 端口。

base64decode 命令

base64decode 用来解码 base64 数据。

基本用法:

tidb-ctl base64decode [base64_data] tidb-ctl base64decode [db_name.table_name] [base64_data] tidb-ctl base64decode [table_id] [base64_data]
  1. 准备环境,执行以下 SQL

    use test; create table t (a int, b varchar(20),c datetime default current_timestamp , d timestamp default current_timestamp, unique index(a)); insert into t (a,b,c) values(1,"哈哈 hello",NULL); alter table t add column e varchar(20);
  2. 用 HTTP API 接口获取 MVCC 数据

    curl "http://$IP:10080/mvcc/index/test/t/a/1?a=1"
    { "info": { "writes": [ { "start_ts": 407306449994645510, "commit_ts": 407306449994645513, "short_value": "AAAAAAAAAAE=" # unique index a 存的值是对应行的 handle id. } ] } }%
    curl "http://$IP:10080/mvcc/key/test/t/1"
    { "info": { "writes": [ { "start_ts": 407306588892692486, "commit_ts": 407306588892692489, "short_value": "CAIIAggEAhjlk4jlk4ggaGVsbG8IBgAICAmAgIDwjYuu0Rk=" # handle id 为 1 的行数据。 } ] } }%
  3. 用 base64decode 解码 handle id (uint64).

    tidb-ctl base64decode AAAAAAAAAAE=
    hex: 0000000000000001 uint64: 1
  4. 用 base64decode 解码行数据。

    ./tidb-ctl base64decode test.t CAIIAggEAhjlk4jlk4ggaGVsbG8IBgAICAmAgIDwjYuu0Rk=
    a: 1 b: 哈哈 hello c is NULL d: 2019-03-28 05:35:30 e not found in data

    如果 test.t 的 table id 是 60,你也可以使用下列命令获得同样结果:

    ./tidb-ctl base64decode 60 CAIIAggEAhjlk4jlk4ggaGVsbG8IBgAICAmAgIDwjYuu0Rk=
    a: 1 b: 哈哈 hello c is NULL d: 2019-03-28 05:35:30 e not found in data

decoder 命令

  • 以下示例解码 row key,index key 类似。

    ./tidb-ctl decoder "t\x00\x00\x00\x00\x00\x00\x00\x1c_r\x00\x00\x00\x00\x00\x00\x00\xfa"
    format: table_row table_id: -9223372036854775780 row_id: -9223372036854775558
  • 以下示例解码 value

    ./tidb-ctl decoder AhZoZWxsbyB3b3JsZAiAEA==
    format: index_value index_value[0]: {type: bytes, value: hello world} index_value[1]: {type: bigint, value: 1024}

etcd 命令

  • tidb-ctl etcd ddlinfo 获取 DDL 信息。

  • tidb-ctl etcd putkey KEY VALUE 添加 KEY VALUE 到 etcd(所有的 KEY 会添加到 /tidb/ddl/all_schema_versions/ 之下)。

    tidb-ctl etcd putkey "foo" "bar"

    实际是添加 KEY 为 /tidb/ddl/all_schema_versions/foo,VALUE 为 bar 的键值对到 etcd 中。

  • tidb-ctl etcd delkey 删除 etcd 中的 KEY,只有前缀以 /tidb/ddl/fg/owner/ 和 /tidb/ddl/all_schema_versions/ 开头才允许被删除。

    tidb-ctl etcd delkey "/tidb/ddl/fg/owner/foo" && tidb-ctl etcd delkey "/tidb/ddl/all_schema_versions/bar"

log 命令

TiDB 错误日志的堆栈信息是一行的格式,可以使用 tidb-ctl log 将堆栈信息格式化成多行形式。

keyrange 命令

keyrange 子命令用于查询全局或表相关的关键 key range 信息,以十六进制形式输出。

  • 使用 tidb-ctl keyrange 命令查看全局的关键 key range。

    tidb-ctl keyrange
    global ranges: meta: (6d, 6e) table: (74, 75)
  • 添加 --encode 选项可以显示 encode 过的 key(与 TiKV 及 PD 中的格式相同)。

    tidb-ctl keyrange --encode
    global ranges: meta: (6d00000000000000f8, 6e00000000000000f8) table: (7400000000000000f8, 7500000000000000f8)
  • 使用 tidb-ctl keyrange --database={db} --table={tbl} 命令查看全局和表相关的关键 key range。

    tidb-ctl keyrange --database test --table ttt
    global ranges: meta: (6d, 6e) table: (74, 75) table ttt ranges: (NOTE: key range might be changed after DDL) table: (74800000000000002f, 748000000000000030) table indexes: (74800000000000002f5f69, 74800000000000002f5f72) index c2: (74800000000000002f5f698000000000000001, 74800000000000002f5f698000000000000002) index c3: (74800000000000002f5f698000000000000002, 74800000000000002f5f698000000000000003) index c4: (74800000000000002f5f698000000000000003, 74800000000000002f5f698000000000000004) table rows: (74800000000000002f5f72, 748000000000000030)

[转帖]TiDB Control 使用说明的更多相关文章

  1. [转帖] tmux 的使用说明

    之前曾经看过 tmux 的简介 但是一直不会用 这次 看了下 原来是这么处理 不过 用windows 多了 还是感觉鼠标 操作多一些 全键盘操作的习惯 还是没有养成. 原贴地址: https://ww ...

  2. Delphi中SendMessage使用说明(所有消息说明) good

    Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  4. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  5. AC6102开发板USB3.0测试和使用说明

    AC6102开发板USB3.0测试和使用说明 概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲, ...

  6. IDEA工具使用说明

    IDEA使用说明 1.安装 2.开始界面 1)create New Project (新建项目) 2)Import Project  (导入项目) 3)Open (打开已有的项目) 4)Check o ...

  7. Markdown 语法和 MWeb 写作使用说明

    ---恢复内容开始--- # Markdown 语法和 MWeb 写作使用说明 Markdown 的设计哲学 Markdown 的目標是實現「易讀易寫」. 不過最需要強調的便是它的可讀性.一份使用 M ...

  8. Linux下TC使用说明

    Linux下TC使用说明   一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...

  9. Markdown语法和MWeb使用说明

    Markdown 语法和 MWeb 写作使用说明 开始写博客,首先熟悉一下Markdown,以前过看GitHub里的README.MD,感受到了这种文字排版的简洁美观. 写博客是一种有效的学习总结和分 ...

  10. mysqldump 使用说明

    mysqldump 使用说明 A Database Backup Program mysqldump客户端是一款实用的mysql备份程序,可以对数据库的定义及数据表内容,进行备份生成相应的SQL语句. ...

随机推荐

  1. k8s 标签-2

    目录 标签-2 node的角色 修改node节点的角色,将他的角色修改成他的主机名 标签的作用 Cordon,Drain以及污点 Cordon--告警警戒 Drain 驱逐演示 污点 污点的Cordo ...

  2. HDU 2709 Sumset DP 二进制

    原题链接 题意 给我们一个整数k,要求我们将k分成若干个二的整数幂(1, 2, 4, 8...)的加和形式,问我们所有的分法中,本质不同(即某个2的幂的数量不同)的形式有多少种,k最多为1000000 ...

  3. Spring系列:基于注解的方式构建IOC

    目录 一.搭建子模块spring6-ioc-annotation 二.添加配置类 三.使用注解定义 Bean 四.@Autowired注入 五.@Resource注入 六.全部代码 从 Java 5 ...

  4. 干掉PPT!现场编码的职级晋升答辩你参加过么?

    摘要:研发讲究的是真本事,是骡子是马咱们还得代码上见真章. 最近这小半年的时间,凭借对各种API的巧妙应用,我从一个差点被淘汰的"前浪"变成了公司人人尊敬的技术委员会副主席,工作思 ...

  5. 了解库开发,我们从STM32标准库开发学起

    摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...

  6. 4种语义分割数据集Cityscapes上SOTA方法总结

    摘要:当前语义分割方法面临3个挑战. 1 Cityscapes数据集介绍 Cityscapes评测数据集即城市景观数据集,在2015年由奔驰公司推动发布,是目前公认的机器视觉领域内最具权威性和专业性的 ...

  7. 云小课 | 华为云KYON之L2CG

    摘要:本文介绍KYON独创的L2CG,打通大二层网络,支持企业携带私网IP直接上云,让业务敏捷迁移,大幅降低企业上云的复杂度和成本.同时支持虚拟机粒度迁移,让企业上云过程中无需迁移整个子网. 本文分享 ...

  8. 论文解读:ACL2021 NER | 基于模板的BART命名实体识别

    摘要:本文是对ACL2021 NER 基于模板的BART命名实体识别这一论文工作进行初步解读. 本文分享自华为云社区<ACL2021 NER | 基于模板的BART命名实体识别>,作者: ...

  9. 开心档之C++ 数据封装

    C++ 数据封装 所有的 C++ 程序都有以下两个基本要素: **程序语句(代码):**这是程序中执行动作的部分,它们被称为函数. **程序数据:**数据是程序的信息,会受到程序函数的影响. 封装是面 ...

  10. 如何在上架App之前设置证书并上传应用

    ​ App上架教程 在上架App之前想要进行真机测试的同学,请查看<iOS- 最全的真机测试教程>,里面包含如何让多台电脑同时上架App和真机调试. P12文件的使用详解 注意: 同样可以 ...