ndb_blob_tool —检查和修复NDB群集表的BLOB和TEXT列
该工具可用于检查NDB表中的孤立BLOB列部分并从中删除它们,以及生成列出所有孤立部分的文件。有时在诊断和修复NDB包含BLOB或TEXT列的损坏或损坏的表中很有用。
ndb_blob_tool的基本语法如下所示:
ndb_blob_tool [options] table [column, ...]
除非你使用的--help选项,你必须指定一个动作通过包括一个或更多的选项来执行--check-orphans,--delete-orphans或--dump-file。这些选项使ndb_blob_tool分别检查孤立的BLOB部件,删除所有孤立的BLOB部件并生成转储文件,其中列出了孤立的BLOB部件,本节稍后将对其进行详细说明。
调用ndb_blob_tool时,还必须指定表的名称。此外,您可以选择在表名后加上该表中一个或多个BLOB或TEXT列的(逗号分隔)名称。如果未列出任何列,则该工具可在所有表BLOB和TEXT列上使用。如果需要指定数据库,请使用--database(-d)选项。
该--verbose选项在输出中提供有关工具进度的其他信息。
下表包含特定于ndb_blob_tool的选项。附加说明如下表。有关大多数NDB群集程序(包括ndb_blob_tool)通用的选项,请参见“ NDB群集程序的通用选项— NDB群集程序的通用选项”。
ndb_blob_tool程序的命令行选项
| 格式 | 描述 | 添加,不建议使用或删除 | 
|---|---|---|
| 
 | 编写虚拟的Blob零件来代替丢失的零件 | 添加:NDB 8.0.20 | 
| 
 | 检查具有内联零件但零件表中缺少一个或多个零件的斑点 | 添加:NDB 8.0.20 | 
| 
 | 检查没有对应的内联零件的Blob零件 | (在所有基于MySQL 8.0的版本中受支持) | 
| 
 
 | 在表中查找数据库 | (在所有基于MySQL 8.0的版本中受支持) | 
| 
 | 删除没有相应内联部分的Blob部分 | (在所有基于MySQL 8.0的版本中受支持) | 
| 
 | 将孤立密钥写入指定文件 | (在所有基于MySQL 8.0的版本中受支持) | 
| 
 
 | 详细输出 | (在所有基于MySQL 8.0的版本中受支持) | 
- --add-missing- 属性 - 值 - 命令行格式 - --add-missing - 介绍了 - 8.0.20-ndb-8.0.20 - 类型 - 布尔型 - 默认值 - FALSE - 对于没有对应的BLOB部分的NDB群集表中的每个内联部分,请写入所需长度的虚拟BLOB部分,该部分由空格组成。 
- --check-missing- 属性 - 值 - 命令行格式 - --check-missing - 介绍了 - 8.0.20-ndb-8.0.20 - 类型 - 布尔型 - 默认值 - FALSE - 检查NDB群集表中没有相应BLOB部分的内联部分。 
- --check-orphans- 属性 - 值 - 命令行格式 - --check-orphans - 类型 - 布尔型 - 默认值 - FALSE - 在NDB群集表中检查没有相应内联部件的BLOB部件。 
- --database=db_name,- -d- 属性 - 值 - 命令行格式 - --database=db_name - 类型 - string - 默认值 - [none] - 指定要在其中查找表的数据库。 
- --delete-orphans- 属性 - 值 - 命令行格式 - --delete-orphans - 类型 - 布尔型 - 默认值 - FALSE - 从NDB群集表中删除没有相应内联部件的BLOB部件。 
- --dump-file=file- 属性 - 值 - 命令行格式 - --dump-file=file - 类型 - 文件名 - 默认值 - [none] - 将孤立的BLOB列零件列表写入 - file。写入文件的信息包括每个孤立的BLOB部件的表键和BLOB部件号。
- --verbose- 属性 - 值 - 命令行格式 - --verbose - 类型 - 布尔型 - 默认值 - FALSE - 在工具的输出中提供有关其进度的其他信息。 
例
首先,我们使用下面显示的语句NDB在test数据库中创建一个表CREATE TABLE:
USE test;CREATE TABLE btest ( c0 BIGINTUNSIGNED NOT NULLAUTO_INCREMENT PRIMARY KEY , c1 TEXT, c2 BLOB )ENGINE =NDB ;
然后,我们使用与此类似的一系列语句在该表中插入几行:
INSERT INTO btestVALUES (NULL, 'x', REPEAT('x', 1000));
--check-orphans针对该表运行时,ndb_blob_tool生成以下输出:
shell>ndb_blob_tool --check-orphans --verbose -d test btest connected processing 2 blobs processing blob #0 c1 NDB$BLOB_19_1 NDB$BLOB_19_1: nextResult: res=1 total parts: 0 orphan parts: 0 processing blob #1 c2 NDB$BLOB_19_2 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=0 NDB$BLOB_19_2: nextResult: res=1 total parts: 10 orphan parts: 0 disconnected NDBT_ProgramExit: 0 - OK
该工具报告没有NDB与column关联的BLOB列部件c1,即使它c1是TEXT列。这是由于以下事实:在NDB表中,仅将a BLOB或TEXT列值的前256个字节内联存储,并且仅将多余的(如果有的话)单独存储;因此,如果在这些类型之一的给定列中没有使用超过256个字节的值,则不会为此列BLOB创建任何列部分NDB。有关更多信息,请参见“数据类型存储要求”。
