Cassandra:如果只对一个节点执行TRUNCATE表并还原备份,我会丢失数据吗?

时间:2018-08-10 09:28:11

标签: cassandra

假设我有[3个节点-1个数据中心-1个群集] cassandra设置。

复制系数= 2的键空间

我正在为所有节点进行定期快照和增量备份。

我的3个节点之一由于任何原因完全崩溃,我想恢复备份。

Cassandra(datastax) documentation建议通常在恢复之前对表进行TRUNCATE。

问题: 由于我只打算在一个节点上还原备份,因此需要TRUNCATE吗?根据我的理解,因为truncate将从所有节点中删除该表的数据。 TRUNCATE Doc

因此,如果我截断表并仅在一个节点上还原备份,那么我也不会丢失该表中存储在其他节点上的数据吗?

1 个答案:

答案 0 :(得分:0)

首先,在您的情况下,您可能根本不想还原备份。由于复制因子= 2,因此您的数据仍位于原始三个数据库的另一个节点上。因此,您可以删除完全崩溃的节点,然后再次添加它。 Cassandra将自动对其进行加速,并将数据流式传输到其中。

或者,您可以使用SSTableLoader将备份中的数据文件流式传输到群集中。

不过,为了解起见,还有其他几点:

  • 截断将删除所有节点上表中的数据。
  • 如果您截断表然后仅在一个节点上进行还原,则将丢失复制因子= 2和三个节点的数据。
  • 对于您而言,不需要截断

为什么要截断?

在某些情况下建议截断,因为还原的数据将比新数据具有更早的时间戳。

您发送的链接中的示例很容易解释这些情况之一。 如果您不小心删除了很多数据并希望恢复旧数据,则需要先删除那些将这些行标记为已删除的逻辑删除。