Cassandra 文档

版本

您正在查看预发布版本的文档。

sstablescrub

修复损坏的 sstable。scrub 过程会重写 sstable,跳过任何损坏的行。由于这些行会丢失,因此请在该过程之后进行修复。

在执行此工具之前,必须停止 Cassandra,否则会导致意外结果。注意:该脚本不会验证 Cassandra 是否已停止。

用法

sstablescrub <options> <keyspace> <table>

--debug 显示堆栈跟踪

-h,--help

显示此帮助消息

-m,--manifest-check

仅检查和修复分层清单,而不实际清理 sstable

-n,--no-validate

不使用列验证器验证列

-r,--reinsert-overflowed-ttl

使用支持的最大过期日期 2038-01-19T03:14:06+00:00 重写受 CASSANDRA-14092 影响的过期日期溢出的行。这些行将使用原始时间戳加一毫秒重写,以覆盖/取代在受影响行的压缩过程中可能生成的任何潜在墓碑。

-s,--skip-corrupted

跳过计数器表中的损坏行

-v,--verbose

详细输出

基本清理

没有选项的清理将首先进行快照,然后将所有非损坏的文件写入新的 sstable。

示例

sstablescrub keyspace1 standard1
Pre-scrub sstables snapshotted into snapshot pre-scrub-1534424070883
Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') (17.142MiB)
Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') complete: 73367 rows in new sstable and 0 empty (tombstoned) rows dropped
Checking leveled manifest

不进行验证的清理

使用 --no-validate 选项保留可能被错误表示(例如,存储在长字段中的整数)但未损坏的数据。这些数据通常不会对客户端造成任何错误。

示例

sstablescrub --no-validate keyspace1 standard1
Pre-scrub sstables snapshotted into snapshot pre-scrub-1536243158517
Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') (4.482MiB)
Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') complete; looks like all 0 rows were tombstoned

跳过损坏的计数器表

如果计数器表以阻止 sstablescrub 完成的方式损坏,则可以使用 --skip-corrupted 选项跳过清理这些计数器表。在 2.0+ 版本中,此解决方法不再需要。

示例

sstablescrub --skip-corrupted keyspace1 counter1

处理溢出日期

使用选项 --reinsert-overflowed-ttl 允许重写具有超过最大值的(导致溢出)最大 TTL 的行。

示例

sstablescrub --reinsert-overflowed-ttl keyspace1 counter1

清单检查

从 Cassandra 2.0 版本开始,此选项不再相关,因为级别数据已从单独的清单移动到 sstable 元数据中。