所以我搞砸了,不小心将我们的Cassandra 2盒子升级到了Cassandra 3.数据完好无损,但我需要把它恢复到Cassandra 2以与其他工具兼容。我在这里阅读了帖子How to downgrade Cassandra 3.0.0 -> 2.x?,我可以手动浮动数据,如果它需要的话(它不是那么多的数据)。
使用apt-get dist-upgrade
意外地完成了升级,但之后没有做任何事情,有关于使用nodetool
的评论,除非它是其中的一部分,否则它无法运行apt-get process
。我知道关于管理卡桑德拉的事情只有0个。
我已经使用以下版本构建了一个新的Cassandra 2服务器:
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Cassandra 3服务器的版本为:
[cqlsh 5.0.1 | Cassandra 3.0.6 | CQL spec 3.4.0 | Native protocol v4]
我使用COPY
命令将所有数据导出到CSV文件中,并使用键空间上的DESC
显示所有表及其各自的标题和类型。
如果我尝试使用我从.cql
命令创建的DESC
文件来重建密钥空间和表,它就会失败:
cqlsh -u cassandra -p cassandra -f "mykeyspace.cql"
mykeyspace.cql:22:Bad Request: Unknown property 'crc_check_chance'
mykeyspace.cql:40:Bad Request: Unknown property 'crc_check_chance'
mykeyspace.cql:57:Bad Request: Unknown property 'crc_check_chance'
...
它似乎创建了密钥空间,因为我可以在cqlsh
中浏览它,但它没有任何表格,因此我无法从CSV导入数据。
我想也许crc_check_chance是3.x中引入的新东西,所以我尝试删除它并在删除键空间后重新运行.cql
文件,但它仍然失败,只是在其他选项上。
如何将此数据恢复到Cassandra 2?
编辑:这是我从(当前)Cassandra 3实例导出的一个表:
CREATE TABLE mykeyspace.users (
username text PRIMARY KEY,
first_name text,
last_name text,
roles set<text>
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
这失败了,但是如果我删除以下字段,它似乎构建了表:
AND crc_check_chance = 1.0
AND min_index_interval = 128
AND max_index_interval = 2048
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
即使创建了表,数据也无法从CSV导入,这可能是我没有正确使用命令:
cqlsh> USE mykeyspace;
cqlsh:mykeyspace> COPY users FROM '/home/user/cassandra/users.csv';
Bad Request: line 1:118 no viable alternative at input ')'
Aborting import at record #0 (line 1). Previously-inserted values still present.
答案 0 :(得分:1)
所以听起来它是由apt-get upgrade
意外升级的,它不会自动运行nodetool upgradesstables
(这是一个手动步骤,请参阅通过APT更新后运行的upgrade guide#9)
所以你应该能够做到以下几点:
apt-cache showpkg cassandra
sudo apt-get install cassandra=<desired-cassandra-version>
apt-mark hold cassandra