cassandra 数据导出导入_cassandra数据备份与迁移

本文详细介绍了Cassandra数据库的备份与迁移方法,包括单点备份和集群备份。内容涵盖备份schema、数据快照、恢复快照,以及使用sstableloader进行数据迁移的步骤。关键操作如nodetool snapshot、cqlsh命令和自定义脚本的使用也被详尽阐述。
摘要由CSDN通过智能技术生成

注意备份的时候schema也要备份一下,否则不能恢复快照!

单点备份

1.备份单个keyspace schema

cqlsh -e "DESC KEYSPACE user" > user_schema.cql

2.备份整个database schema

cqlsh -e "DESC SCHEMA" > db_schema.cql

3.导入keyspace schema

在 user_schema.cql所在的目录下打开cqlsh:

source 'user_schema.cql'

4.导入database schema:

在db_schema.cql所在的目录下打开cqlsh:

source 'db_schema.cql'

5.备份单个keyspace数据

bin/nodetool snapshot -t 20171130 user

6.备份所有的keyspace

bin/nodetool snapshot -t 20171130

-t后面指定快照的名字,备份好的数据在这个目录下

$CASSANDRA_HOME/data/yourkeyspace/table-uuid/snapshots/20171130

7.使用脚本将快照拷贝出来

将如下脚本保存为copy.sh,注意修改keyspacePath和dstKeyspacePath的值。 这个脚本只拷贝某一个keyspace的快照

#!/bin/bashkeyspacePath="cassandra-3.11.1/data/data/your_keysapce_name"currentIp=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'`dstKeyspacePath="/home/master/beifen/$currentIp/my_backup"echo $currentIpif [ ! -x "$dstKeyspacePath" ]; then mkdir -p $dstKeyspacePathfi for dir in `ls $keyspacePath`; do ( currentTableName=`basename $dir` echo "currentTableName=$currentTableName" tableDstPath="$dstKeyspacePath/$currentTableName" echo "tableDstPath=$tableDstPath" if [ ! -x "$tableDstPath" ]; then mkdir -p $tableDstPath fi cp -r "$keyspacePath/$dir/snapshots/" $tableDstPath); done

给脚本赋予执行权限:

chmod +x ./copy.sh

执行脚本:

./copy.sh

8.恢复快照

将dstKeyspacePath下的SSTable(table-uuid)目录拷贝到新的cassandra的Data目录下,执行如下命令即可

bin/nodetool refresh

集群备份

直接从一个集群导到另一个集群:

1.memTable数据刷新到SSTable

bin/nodetool flush

2.源集群导出schema

cqlsh 192.168.40.x -e "DESC KEYSPACE your_keyspace" > your_keyspace_schema.cql

将your_keyspace_schema.cql 拷贝到目录集群某个目录下,然后进入到这个目录,打开cqlsh。

source 'your_keyspace_schema.cql'

3.使用脚本直接导数据

该脚本只能导一个keyspace

将如下脚本保存为 migrate.sh,注意修改keyspacePath和dstClusterIP。keyspacePath是源集群的keyspace所在目录,dstClusterIP是目标集群的IP,可以是多个。

#!/bin/bashkeyspacePath="cassandra-3.11.1/data/data/your_keyspace"dstClusterIP=192.168.40.1,192.168.40.2,192.168.40.3for dir in `ls $keyspacePath`; do ( sstableloader -d $dstClusterIP -t 100 "$keyspacePath/$dir"); done

脚本赋上执行权限:

chmod +x ./migrate.sh

执行脚本,(请确保你的PATH环境变量里配置过Cassandra的路径)

./migrate.sh

如果要备份所有的数据:

#!/bin/bashsrcDataPath="/data/janus/apache-cassandra-3.11.1/data/data"# 可以是多个IP,逗号分隔dstClusterIP=192.168.40.13 for keyspacePath in `ls $srcDataPath`; do ( echo "currentkeyspace=$keyspacePath" for table in `ls $srcDataPath/$keyspacePath`; do ( echo "$srcDataPath/$keyspacePath/$table" sstableloader -d $dstClusterIP -t 100 "$srcDataPath/$keyspacePath/$table" );done);done

dstClusterIP 后面指定的是目标集群的IP,可以是多个IP。根据你的实际情况修改之。

srcDataPath 是源集群的数据目录。根据你的实际情况修改之。

执行脚本的时候,控制台会打印出当前备份的进度。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值