用法
ndb_desc -c connection_string tbl_name -d db_name [options]
ndb_desc -c connection_string index_name -d db_name -t tbl_name
可以在本节后面列出的 ndb_desc 中使用其他选项。
示例输出
MySQL 表创建和填充语句
USE test;
CREATE TABLE fish (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
length_mm INT NOT NULL,
weight_gm INT NOT NULL,
PRIMARY KEY pk (id),
UNIQUE KEY uk (name)
) ENGINE=NDB;
INSERT INTO fish VALUES
(NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
(NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
(NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);
来自 ndb_desc 的输出
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 2
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 337
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
0 2 2 32768 32768 0 0
1 4 4 32768 32768 0 0
可以使用表名称(用空格分隔)在一次调用 ndb_desc 中获取有关多个表的信息。所有表都必须在同一个数据库中。
可以使用 --table
(简写形式:-t
)选项并提供索引名称作为 ndb_desc 的第一个参数来获取有关特定索引的更多信息,如下所示
$> ./ndb_desc uk -d test -t fish
-- uk --
Version: 2
Base table: fish
Number of attributes: 1
Logging: 0
Index type: OrderedIndex
Index status: Retrieved
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
-- IndexTable 10/uk --
Version: 2
Fragment type: FragUndefined
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: yes
Number of attributes: 2
Number of primary keys: 1
Length of frm data: 0
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 2
ForceVarPart: 0
PartitionCount: 2
FragmentCount: 2
FragmentCountType: ONE_PER_LDM_PER_NODE
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
NDB$TNODE Unsigned [64] PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
-- Indexes --
PRIMARY KEY(NDB$TNODE) - UniqueHashIndex
以这种方式指定索引时,--extra-partition-info
和 --extra-node-info
选项无效。
输出中的 Version
列包含表的模式对象版本。有关解释此值的信息,请参阅 NDB 模式对象版本。
可以使用嵌入在 CREATE TABLE
和 ALTER TABLE
语句中的 NDB_TABLE
注释设置的三个表属性在 ndb_desc 输出中可见。表的 FRAGMENT_COUNT_TYPE
始终显示在 FragmentCountType
列中。如果 READ_ONLY
和 FULLY_REPLICATED
设置为 1,则会显示在 Table options
列中。您可以在 mysql 客户端中执行以下 ALTER TABLE
语句后看到这一点
mysql> ALTER TABLE fish COMMENT='NDB_TABLE=READ_ONLY=1,FULLY_REPLICATED=1';
1 row in set, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
+---------+------+---------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------------------------------+
| Warning | 1296 | Got error 4503 'Table property is FRAGMENT_COUNT_TYPE=ONE_PER_LDM_PER_NODE but not in comment' from NDB |
+---------+------+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
发出警告是因为 READ_ONLY=1
需要表的碎片计数类型为(或设置为)ONE_PER_LDM_PER_NODE_GROUP
;NDB
在此类情况下会自动设置此选项。可以使用 SHOW CREATE TABLE
检查 ALTER TABLE
语句是否具有预期效果
mysql> SHOW CREATE TABLE fish\G
*************************** 1. row ***************************
Table: fish
Create Table: CREATE TABLE `fish` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`length_mm` int(11) NOT NULL,
`weight_gm` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk` (`name`)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
COMMENT='NDB_TABLE=READ_BACKUP=1,FULLY_REPLICATED=1'
1 row in set (0.01 sec)
由于 FRAGMENT_COUNT_TYPE
没有显式设置,因此其值不会显示在 SHOW CREATE TABLE
打印的注释文本中。但是,ndb_desc 会显示此属性的更新值。Table options
列显示刚刚启用的二进制属性。您可以在此处显示的输出中看到这一点(强调的文本)
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 4
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 380
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 1
FragmentCount: 1
FragmentCountType: ONE_PER_LDM_PER_NODE_GROUP
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options: readbackup, fullyreplicated
HashMap: DEFAULT-HASHMAP-3840-1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
有关这些表属性的更多信息,请参阅 第 15.1.20.12 节,“设置 NDB 注释选项”。
Extent_space
和 Free extent_space
列仅适用于在磁盘上具有列的 NDB
表;对于仅具有内存中列的表,这些列始终包含值 0
。
为了说明它们的用法,我们修改了之前的示例。首先,我们必须创建必要的磁盘数据对象,如下所示
CREATE LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_1.log'
INITIAL_SIZE 16M
UNDO_BUFFER_SIZE 2M
ENGINE NDB;
ALTER LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_2.log'
INITIAL_SIZE 12M
ENGINE NDB;
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
INITIAL_SIZE 32M
ENGINE NDB;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_2.dat'
INITIAL_SIZE 48M
ENGINE NDB;
(有关刚刚显示的语句以及这些语句创建的对象的更多信息,请参阅 第 25.6.11.1 节,“NDB Cluster 磁盘数据对象”,以及 第 15.1.16 节,“CREATE LOGFILE GROUP 语句” 和 第 15.1.21 节,“CREATE TABLESPACE 语句”。)
现在,我们可以创建和填充 fish
表的版本,该版本将 2 个列存储在磁盘上(如果先前版本的表已存在,则先将其删除)
DROP TABLE IF EXISTS fish;
CREATE TABLE fish (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
length_mm INT NOT NULL,
weight_gm INT NOT NULL,
PRIMARY KEY pk (id),
UNIQUE KEY uk (name)
) TABLESPACE ts_1 STORAGE DISK
ENGINE=NDB;
INSERT INTO fish VALUES
(NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
(NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
(NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);
在针对此版本的表运行时,ndb_desc 将显示以下输出
$> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 1
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 1001
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options: readbackup
HashMap: DEFAULT-HASHMAP-3840-2
Tablespace id: 16
Tablespace: ts_1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(80;utf8mb4_0900_ai_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
length_mm Int NOT NULL AT=FIXED ST=DISK
weight_gm Int NOT NULL AT=FIXED ST=DISK
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory Extent_space Free extent_space
0 2 2 32768 32768 1048576 1044440
1 4 4 32768 32768 1048576 1044400
这意味着在每个分区上从表空间为该表分配了 1048576 字节,其中 1044440 字节仍然可用作其他存储。换句话说,当前正在使用 1048576 - 1044440 = 4136 字节/分区来存储该表磁盘上列的数据。显示为 Free extent_space
的字节数可用于存储来自 fish
表的磁盘上列的数据;因此,在从信息架构 FILES
表中选择时,此字节数不可见。
Tablespace id
和 Tablespace
也显示在磁盘数据表中。
对于完全复制的表,ndb_desc 只显示保存主分区碎片副本的节点;具有副本碎片副本(仅)的节点将被忽略。可以使用 mysql 客户端从 table_distribution_status
、table_fragments
、table_info
和 table_replicas
表(在 ndbinfo
数据库中)中获取此类信息。
下表显示了可在 ndb_desc 中使用的所有选项。表后有其他描述。
--auto-inc
,-a
显示表的
AUTO_INCREMENT
列的下一个值(如果有)。--blob-info
,-b
使用此选项还需要使用
--extra-partition-info
(-p
) 选项。-
命令行格式 --character-sets-dir=path
包含字符集的目录。
-
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
在放弃之前重试连接的次数。
-
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间的等待时间(以秒为单位)。
-
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 --context
,-x
显示表的其他上下文信息,例如模式、数据库名称、表名称和表的内部 ID。
-
命令行格式 --core-file
在发生错误时写入核心文件;用于调试。
指定应在其中找到表的数据库。
-
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [无]
在读取全局文件后读取给定文件。
-
命令行格式 --defaults-file=path
类型 字符串 默认值 [无]
仅从给定文件读取默认选项。
-
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [无]
还读取具有 concat(group, suffix) 的组。
包含有关表分区与它们驻留的数据节点之间的映射的信息。此信息对于验证分布感知机制和支持应用程序更有效地访问 NDB Cluster 中存储的数据很有用。
使用此选项还需要使用
--extra-partition-info
(-p
) 选项。打印有关表的划分的其他信息。
-
命令行格式 --help
显示帮助文本并退出。
-
命令行格式 --login-path=path
类型 字符串 默认值 [无]
从登录文件读取给定路径。
-
命令行格式 --no-login-paths
跳过从登录路径文件读取选项。
-
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [无]
设置连接字符串以连接到ndb_mgmd。语法:
[nodeid=
。覆盖id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
命令行格式 --ndb-mgm-tls=level
类型 枚举 默认值 relaxed
有效值 relaxed
strict
设置连接到管理服务器所需的 TLS 支持级别;
relaxed
或strict
之一。relaxed
(默认)表示尝试 TLS 连接,但不强制成功;strict
表示连接需要 TLS。 -
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [无]
设置此节点的节点 ID,覆盖由
--ndb-connectstring
设置的任何 ID。 --ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
启用针对事务节点选择的优化。默认情况下启用;使用
--skip-ndb-optimized-node-selection
禁用。-
命令行格式 --ndb-tls-search-path=list
类型 路径名 默认值(Unix) $HOME/ndb-tls
默认值(Windows) $HOMEDIR/ndb-tls
指定要搜索 CA 文件的目录列表。在 Unix 平台上,目录名由冒号 (
:
) 分隔;在 Windows 系统上,分号字符 (;
) 用作分隔符。目录引用可以是相对的或绝对的;它可以包含一个或多个环境变量,每个变量都用前缀美元符号 ($
) 表示,并在使用前扩展。搜索从最左边的命名目录开始,从左到右进行,直到找到文件。空字符串表示空搜索路径,这会导致所有搜索失败。由一个点 (
.
) 组成的字符串表示搜索路径限制为当前工作目录。如果没有提供搜索路径,则使用编译后的默认值。此值取决于使用的平台:在 Windows 上,它是
\ndb-tls
;在其他平台(包括 Linux)上,它是$HOME/ndb-tls
。这可以通过使用-DWITH_NDB_TLS_SEARCH_PATH
编译 NDB Cluster 来覆盖。 -
命令行格式 --no-defaults
不要从除登录文件以外的任何选项文件中读取默认选项。
-
命令行格式 --print-defaults
打印程序参数列表并退出。
--retries=
,#
-r
尝试连接此次数,然后放弃。每秒尝试连接一次。
--table=
,tbl_name
-t
指定要查找索引的表。
--unqualified
,-u
使用非限定表名。
-
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
命令行格式 --version
显示版本信息并退出。
输出中列出的表索引按 ID 排序。