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