我有以下cassandra查询;
前几天我使用c#和单节点Cassandra db开发了应用程序。当应用程序在生产中,发生电源故障并且cassandra commitlog被破坏。因为cassandra节点没有启动,所以我已将所有commitlog文件转移到另一个目录并启动了cassandra节点。 最近我注意到电源故障日的数据在数据库中不可用,我所有的commitlog文件都有腐败的commitlog文件名。
您能否建议,有没有办法使用commitlog文件恢复数据。 以及如何避免commitlog文件损坏问题,这样可以避免在生产中丢失数据。
谢谢。
答案 0 :(得分:0)
如果您的提交日志已损坏并且您没有 SSTables ,则有无方法将节点还原到以前的状态。
如果您的提交日志是健康的(意味着它没有损坏),那么您只需要重新启动您的节点。
它将被重放,因此将重建memtable(s)并刷新磁盘上的 generation-1 SSTable。
理想情况下,您可以强制创建SSTable 您可以通过
在 apache-cassandra / bin 目录下执行此操作nodetool flush
因此,如果您对丢失提交日志持谨慎态度。您可以使用上面创建的SSTables将节点重建为以前的状态
nodetool.bat refresh [keyspace] [columnfamily]。
或者您也可以尝试创建快照。
nodetool snapshot
此命令将获取节点上所有键空间的快照。您还可以选择创建备份,但此备份仅记录最新操作。
欲了解更多信息,请尝试阅读 https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsNodetool_r.html
我建议您也可以尝试使用更多节点,从而增加复制因子,以避免将来出现这种情况。
希望它有所帮助!