cassandra數據備份與遷移


注意備份的時候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 是源集群的數據目錄。根據你的實際情況修改之。

執行腳本的時候,控制台會打印出當前備份的進度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM