来自cassandra CLI的DROP COLUMN FAMILY不会丢弃CF.

时间:2014-04-10 08:42:29

标签: cassandra cassandra-cli

我们尝试使用cassandra cli

删除CF.
DROP COLUMN FAMILY cfName

当我们从CLI列出CF时,它不在那里,当我试图通过hector获取现有的CF时

我仍然可以看到CF名称

   KeyspaceDefinition keyspaceDefinition = newConnection().describeKeyspace(keyspaceName);
    keyspaceDefinition.getCfDefs();

CF内的数据不存在,CF仍然列出,在通过hector列出CF后,如果我执行cassandra -cli列列系列,我可以再次看到我删除的CF

1 个答案:

答案 0 :(得分:4)

我不得不在Cassandra 1.1上处理这个问题。基本上,我的列系列已经损坏,并且改变其模式的唯一方法是删除/恢复密钥空间(当时DataStax引导我完成)。

如果您与DataStax签订了支持合同,我强烈建议您在继续之前与他们联系。他们告诉你的第一件事是,这是Cassandra 1.1特定版本中的一个错误,你应该升级。我还没有对其进行测试,但根据它们,就地升级将允许您在新版本中修改架构。因此,您可以通过升级到1.2或2.0来解决此问题。

在我的情况下(生产,企业环境),现场升级不是一种选择。为了解决这个问题,我基本上不得不放弃我的整个键空间,重新创建它(以及我的列族),并从快照中恢复。我松散地跟着instructions found here

  • 拍摄每个节点上的键空间的快照。快照文件应存储在[keyspaceName] / snapshots目录中,但我将我的文件复制到另一个非Cassandra位置只是为了安全起见。
  • DROP你的密钥空间。
  • 停止所有节点。
  • 在每个节点上,删除密钥空间目录中的.db文件(但不删除快照目录)。
  • 将文件从快照目录复制回密钥空间目录。
  • 重新启动一个节点
  • 从该节点cassandra-cli重新创建密钥空间。
  • 验证您的数据是否存在。
  • 重新启动剩余的节点。