Cassandra-意外删除后的数据恢复
由于Cassandra的数据在压缩过程中被物理删除,是否可以以任何方式访问最近删除的数据?我正在寻找类似于Oracle Flashback功能的东西(Cassandra-意外删除后的数据恢复,cassandra,cassandra-3.0,recovery,data-recovery,Cassandra,Cassandra 3.0,Recovery,Data Recovery,由于Cassandra的数据在压缩过程中被物理删除,是否可以以任何方式访问最近删除的数据?我正在寻找类似于Oracle Flashback功能的东西(截至时间戳) 此外,我可以在相关的提交日志文件中看到已删除的数据片段,但它显然不可读。是否可以将此文件转换为更可读的格式?您需要从commitlog执行还原。 最安全的方法是将commitlog复制到一个新集群(使用相同的架构),并按照commitlog\u archiving.properties文件中的说明(注释)进行恢复。在您的情况下,您需要
截至时间戳
)
此外,我可以在相关的提交日志文件中看到已删除的数据片段,但它显然不可读。是否可以将此文件转换为更可读的格式?您需要从commitlog执行还原。
最安全的方法是将commitlog复制到一个新集群(使用相同的架构),并按照
commitlog\u archiving.properties
文件中的说明(注释)进行恢复。在您的情况下,您需要将restore\u point\u In\u time
设置为插入和删除之间的时间。理论上(仍然不确定),您可以执行nodetool flush
,然后停止写入数据,然后使用sstabledump
将数据转储为JSON格式并从中恢复,忽略墓碑。不幸的是,删除数据时数据仍在memtable中(墓碑覆盖了数据)。从实际角度来看,只需补充几点:在Cassandra启动期间,它实际上足以利用commitlog replay行为。我关闭了开发节点,删除了commitlog文件,并上传了包含删除数据的文件。但是,有必要更改system_schema.tables中目标表的ID(或重新创建它们,包括CREATE TABLE语句中的ID),以匹配原始表。否则,将跳过突变(CommitLogReplayer.java:147-跳过9个来自未知(可能已删除)CF(id为…)的突变)。