Cassandra自带的备份还原工具sstable2json和json2sstable只能针对数据库文件进行备份和还原,易用性差。
抽空写了一个脚本,可以对Cassandra数据库进行的备份和还原。效果如下图:
源码如下:
#!/bin/bash#higkoo:备份还原Cassandra数据库脚本
usage="Usage:
$0 <OPTIONS> <DBFileDir> <JSonFileDir>
-h, --help 打印帮助信息并退出
-b, --backup 备份Cassandra数据库
-r, --recover 还原Cassandra数据库
DBFileDir Cassandra数据库文件的目录路径
JSonFileDir Json文件存放路径
Example:
$0 -b /db_data/data_file/system /db_data/json_file/system
$0 --recover /db_data/data_file/system /db_data/json_file/system
Tips:
若需备份完整数据,请先停止Cassandra对外提供服务,然后将commit_log刷入数据库后再执行备份。
"
if [ $# -ne 3 ];then
echo "$usage"
exit 1
fi
cd /usr/local/cassandra
bktool=/usr/local/cassandra/bin/sstable2json
rctool=/usr/local/cassandra/bin/json2sstable
case $1 in
--backup | -b )
sDir=$2
tDir=$3
cd $sDir
sucess=0
filecount=$(ls *-Data.db | wc -l)
echo '从['$sDir']中读取SSTable文件共['$filecount']个,备份至['$tDir']'
for file in `ls *-Data.db`
do
filename=$(echo $file | awk -F. '{print $1}')
sFile=$sDir/${filename}.db
tFile=$tDir/${filename}.json
echo -ne $sFile"\t-->\t"$tFile"\t:"
$bktool $sFile > $tFile
if [ $? -eq 0 ]
then
((sucess++))
echo 'successfully'
fi
done
echo '备份完成:成功/总数 = '$sucess'/'$filecount
;;
--recover | -r)
sDir=$3
tDir=$2
cd $sDir
sucess=0
filecount=$(ls *-Data.json | wc -l)
echo '从['$sDir']中读取Json文件共['$filecount']个,还原至['$tDir']'
for file in `ls *-Data.json`
do
filename=$(echo $file | awk -F. '{print $1}')
sFile=$sDir/${filename}.json
tFile=$tDir/${filename}.db
dbName=$(echo $sFile | awk -F/ '{print $(NF-1)}')
cfName=$(echo $sFile | awk -F/ '{print $NF}' | awk -F- '{print $1}')
echo -ne $sFile"\t-->\t"$tFile"\t:"
$rctool -K $dbName -c $cfName $sFile $tFile
if [ $? -eq 0 ]
then
((sucess++))
fi
done
echo '还原结束:成功/总数 = '$sucess'/'$filecount
;;
*)
echo "$usage"
exit 1
;;
esac
加上计划任务就可以实现定时备份了