如何强制 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?的主要内容,如果未能解决你的问题,请参考以下文章