Cassandra离线数据迁移操作文档

注:以迁移keyspace名为mydb,table名为user表数据为例,使用Cassandra的export/import工具:COPY TO/FROM

另有镜像备份恢复能大粒度实现多keyspace备份功能,但需要相同的system_schema(元数据信息),一般只在同一集群上操作。

一、查看原始Cassandra表

1、进入cqlsh

bin/cqlsh

2、查看keyspace的mydb结构,复制并记录最上方的keyspace创建语句
cqlsh> desc keyspaces mydb;

例:CREATE KEYSPACE mydb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

参数解释:class:策略;replication_factor:复制因子

简单策略:在一个数据中心的情况下使用简单的策略。 在这个策略中,第一个副本被放置在所选择的节点上,剩下的节点被放置在环的顺时针方向,而不考虑机架或节点的位置。

网络拓扑策略:该策略用于多个数据中心。 在此策略中,您必须分别为每个数据中心提供复制因子。

复制因子:复制因子是放置在不同节点上的数据的副本数。 超过两个复制因子是很好的获得没有单点故障。 所以3个以上是很好的复制因子。)

3、选择keyspace
cqlsh> use mydb;

4、查看表

cqlsh:mydb> desc tables;

5、查看详细建表语句,复制,记录

cqlsh:mydb> desc user;

例:CREATE TABLE mydb.user (

    id int PRIMARY KEY,

    user_name 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';

6、记录数据总数用于检测数据完整性

cqlsh:mydb> select count(*) from user;

二、数据导出

1、user数据以csv的格式导出user.csv文件(以系统目录/root/user.csv为例

cqlsh:mydb> COPY mydb.user TO '/root/user.csv';

三、系统文件转移

找到刚刚生成的user.csv文件,复制到需要迁移的服务器(如/root/user.csv

此过程略

四、数据导入

1、在新集群中创建keyspaces和表,keyspace随意,表结构必须与原集群保持一致,创建新keyspace(粘贴之前复制的语句)

cqlsh> CREATE KEYSPACE mydb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

2、在新集群环境中创建新表(粘贴之前复制的建表语句)

cqlsh> CREATE TABLE mydb.user (

    id int PRIMARY KEY,

    user_name 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';

3、将csv数据导入user表

cqlsh> COPY mydb.user FROM '/root/user.csv';

4、确认数据完整性

cqlsh> use mydb;

cqlsh:mydb> select count(*) from user;

5、删除临时产生的csv文件

rm -rf /root/user.csv

你可能感兴趣的:(Cassandra离线数据迁移操作文档)