在从3.0降级到2.1.7后,无法在C * 2.1.7中看到所有的密钥空间

我一直在使用Cassandra 2.1.7,出于某种原因,我升级到3.0.12,后来意识到一些依赖的应用程序将不能使用3.0.12,我降级和使用C * 2.1.7,因为我以前使用。 但现在我无法看到C *中的密钥空间。 (仅供参考:两个C * yaml文件中的数据目录是相同的)

我必须做任何改变吗?

感谢你的帮助。

从2.x升级到3.x时,必须在nodetool中运行upgradesstables命令。 我想这是你做的。 现在,当你降级到2.x时,Cassandra无法读取较新的SSTable格式。 不幸的是没有downgradesstables命令,所以你唯一的选择就是从第一次运行2.x的时候恢复备份。

如果你没有备份,那么没有什么可担心的,因为C * 3.0在升级之后不会删除旧版本的数据库,而只是更新了与sstable相关的CFS,并增加了一些CFS来兼容。

下面是我为保留数据所做的工作:由于3.0对数据库名称的命名约定完全不同,因此我们需要仔细区分数据库和旧数据库(旧版本还是更新版本)。

对于2.X Cassandra dbname对于每个ks都有以下约定:

keyspace-ColumnFamilyName-ka-ID-Data.db keyspace-ColumnFamilyName-ka-ID-Digest.sha1 keyspace-ColumnFamilyName-ka-ID-Filter.db keyspace-ColumnFamilyName-ka-ID-Index.db keyspace-ColumnFamilyName-ka-ID-Statistics.db keyspace-ColumnFamilyName-ka-ID-Summary.db keyspace-ColumnFamilyName-ka-ID-TOC.txt keyspace: keyspace name ColumnFimilyname : Name of the CF under keyspace ka: C* Internal(Haven't explored much on this) ID: It is incremental value I see different sets of these having different id.(looks like it is an increasing factor when it takes snapshot, not sure though) And the last parameter is db name 

所以当我从2.1.7开始读取C *守护进程中的每个日志语句时,发现系统密钥空间下的sstable_actiivity文件不是实际的,因为这个文件的大小非常小。

 /data/system/sstable_activity-5a1ff267ace03f128563cfae6103c65e/system-sstable_activity-ka-145 

所以我试图从快照中找到系统(密钥空间目录ie / data / system /)下的最旧的文件,并用上面的文件替换它。 我也重复了系统密钥空间下的“schema_keyspaces”表。

现在我再次重新启动cassandra守护进程,幸运的是我可以在运行“ DESC KEYSPACES ”后得到密钥空间列表但是当我执行“ DESC TABLES”由sstable_activity找到。

现在我一直在“系统”键盘空间下重复所有其他表的进程。 如下所示:

 schema_keyspaces schema_columnfamilies local schema_columns schema_triggers schema_usertypes 

重新启动Cassandra之后,我能够检索到我的应用程序的预期日期。