如何强制 Commit log 提交到 memtable?

Posted

技术标签:

【中文标题】如何强制 Commit log 提交到 memtable?【英文标题】:How to force the Commit log's commit to memtable? 【发布时间】:2021-09-23 09:16:52 【问题描述】:

我正在使用 sstableloader 的命令来加载备份,我注意到新数据没有加载。分析文件,新数据仍在提交日志中,而不是在备份中。如何强制“提交”内存表中的提交日志数据?

【问题讨论】:

您的意思是说所使用的备份在提交日志中有提交但不在 sstables 中 - 并且您正试图让提交日志在还原后在节点上重播? 是的,我正在尝试这样做。它是在两个数据库中具有相同的数据。这样做不正确吗?你明白我想要做什么吗?根据备份运行的时间,数据不会同步。 sstableloader的命令不显示错误,但是当我选择新数据时它不在表中,好像没有加载一样。 在要恢复到的第二个节点上 - 系统文件是否已恢复?我怀疑新节点 host_id 是不同的,所以提交日志不会重播,即使到位。 @Andrew,它们具有相同的结构。我在下面的 anwser 中执行了第二步,我看到了日期的文件更新(以前没有发生过)。我正在等待加载完成。我会告诉你结果。 【参考方案1】:

所以通常情况下,我会说尝试运行nodetool flush。如果数据正在从内存刷新到磁盘,它应该删除相应的提交日志文件。

如果这没有发生,接下来我会尝试使用nodetool drain 停止节点,然后停止 Cassandra 进程。当您重新启动它时,该节点将处理提交日志并将它们与存储在磁盘上的数据进行协调。

【讨论】:

嗨,Aaron,sstable 的文件日期已更新(没有发生)。我用第二步回答。但是加载后,日志显示该表不存在。但是两个节点的结构是一样的。我们正在使用这一行来加载:find . -maxdepth 5 -type d -exec sstableloader -v --nodes 127.0.0.1 \;。我们做错了什么吗?我们正在将日期复制到 cassandras 的数据库(相同的结构)。 我们再次运行命令行,一切正常!非常感谢!! @LucianaOliveira 非常棒,我很高兴它成功了!

以上是关于如何强制 Commit log 提交到 memtable?的主要内容,如果未能解决你的问题,请参考以下文章

git如何回滚远程仓库

如何更改某个提交内容/如何把当前改动追加到某次commit上

SVN提交强制添加注释信息

git绕过错误强制commit

git绕过错误强制commit

commit参数有什么作用?