https://docs.pingcap.com/zh/tidb/stable/tidb-control
TiDB Control 是 TiDB 的命令行工具,用于获取 TiDB 状态信息,多用于调试。本文介绍了 TiDB Control 的主要功能和各个功能的使用方法。
本节提供了两种方式获取 TiDB Control 工具。
在安装 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
目前,TiDB Control 包含以下子命令。
tidb-ctl base64decode
用于 BASE64 解码tidb-ctl decoder
用于 KEY 解码tidb-ctl etcd
用于操作 etcdtidb-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 连接选项是全局选项,适用于以下所有命令。
in 子命令用来通过数据库名获取数据库中所有表的表结构。
tidb-ctl schema in {数据库名}
如:tidb-ctl schema in mysql
将得到以下结果
结果将以 json 形式展示,内容较长,这里做了截断。
如希望指定表名,可以使用 tidb-ctl schema in {数据库名} -n {表名}
进行过滤。
如:tidb-ctl schema in mysql -n db
将得到 mysql 库中 db 表的表结构。结果如下:
这里同样做了截断。
如使用的 TiDB 地址不为默认地址和端口,可以使用命令行参数 --host
, --port
选项,如:tidb-ctl --host 172.16.55.88 --port 8898 schema in mysql -n db
。
tid 子命令用来通过表的 id 获取数据库中表的表结构。
通过使用 in 子命令查询到数据库中表的 id,之后可以通过 tid 子命令查看表的详细信息。
例如,查询到 mysql.stat_meta
表的 id 是 21,可以通过 tidb-ctl schema tid -i 21
查看表的详细信息。
同 in 子命令一样,如果使用的 TiDB 地址不是默认的地址和端口,需要通过 --host
和 --port
参数指定 TiDB 的地址和 status 端口。
base64decode
用来解码 base64 数据。
基本用法:
准备环境,执行以下 SQL
用 HTTP API 接口获取 MVCC 数据
用 base64decode
解码 handle id (uint64).
用 base64decode
解码行数据。
如果 test.t
的 table id 是 60,你也可以使用下列命令获得同样结果:
以下示例解码 row key,index key 类似。
以下示例解码 value
tidb-ctl etcd ddlinfo
获取 DDL 信息。
tidb-ctl etcd putkey KEY VALUE
添加 KEY VALUE 到 etcd(所有的 KEY 会添加到 /tidb/ddl/all_schema_versions/
之下)。
实际是添加 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 错误日志的堆栈信息是一行的格式,可以使用 tidb-ctl log
将堆栈信息格式化成多行形式。
keyrange
子命令用于查询全局或表相关的关键 key range 信息,以十六进制形式输出。
使用 tidb-ctl keyrange
命令查看全局的关键 key range。
添加 --encode
选项可以显示 encode 过的 key(与 TiKV 及 PD 中的格式相同)。
使用 tidb-ctl keyrange --database={db} --table={tbl}
命令查看全局和表相关的关键 key range。