删除特定的Cassandra快照

时间:2015-06-30 17:48:27

标签: cassandra datastax-enterprise

我知道有一个命令,

nodetool -h localhost -p 7199 clearsnapshot

这将删除所有快照,但是我只想删除特定的快照 - 由于权限配置错误导致节点能够拍摄快照时遇到一些问题,而排除我今天生成的多个快照我想删除同时保留其他

我可以直接进入每个节点的各个快照目录,并手动删除我想要删除的快照吗?

3 个答案:

答案 0 :(得分:3)

您可以手动删除单个快照或使用-t选项,如下所示:

“nodetool clearsnapshot -t snapshot_name ”。

名称是拍摄快照的纪元时间。

所有clearsnapshot命令都是递归删除“snapshots”目录中的指定快照。

请参阅:

deleting snapshots

答案 1 :(得分:1)

  

我可以直接进入每个节点的各个快照目录   并手动删除我想要删除的快照?

确保您不需要它们。快照是为了您的安全。因此,如果您意外地将其截断,则可以恢复表格等。

也许他们回到s3。 OpsCenter通过点击界面为您完成此操作。

答案 2 :(得分:1)

  

"我可以直接进入每个节点的各个快照目录,并手动删除我想要删除的快照吗?"

以下是我用来自动化的Bash脚本的一部分:

#repository directory
DATADIR="/disk1/cassandra/data"
ARCHIVES="/var/lib/cassandra/archive"

cd $DATADIR

CURRDATE=$(date +%Y%m%d) #= 20140801
SNAPSHOTDATE=$(date --date='6 days ago' '+%Y%m%d')
ARCHIVEDATE=$(date --date='21 days ago' '+%Y%m%d')
DELETEDATE=$(date --date='60 days ago' '+%Y%m%d')
#initialize MAXDATE to 20000101, as EVERYTHING will be greater than that
MAXDATE=20000101

#get all snapshot directories
SNAPSHOTDIRS=$(ls -ld --time-style="+%Y%m%d %H:%M" $PWD/*/*/snapshots | grep drwx | awk '{print $8}')

for SNAPDIR in $SNAPSHOTDIRS
do
        #skip anything from OpsCenter
        if [[ $SNAPDIR == *"OpsCenter"* ]]; then
                echo "Skipping OpsCenter"
        else
                #get time and name of all snapshot files
                FILEDATELIST=$(ls -l --time-style="+%Y%m%d %H:%M" $SNAPDIR | grep drwx | awk '{print $6"="$8}')

                        for SNAPSHOT in $FILEDATELIST
                        do
                                #split with awk
                                FDATE=$(echo $SNAPSHOT | awk -F= '{print $1}')
                                SNAME=$(echo $SNAPSHOT | awk -F= '{print $2}')

                                #move snapshots older than 21 days
                                if [[ $FDATE -lt $ARCHIVEDATE ]]; then
                                        mkdir $ARCHIVES/$SNAME
                                        mv $SNAPDIR/$SNAME/* $ARCHIVES/$SNAME
                                        #echo "mv $SNAPDIR/$SNAME/* $ARCHIVES/$SNAME"
                                fi

                                #check/set MAXDATE
                                #echo "is FDATE($FDATE) -gt MAXDATE($MAXDATE)?"
                                if [[ $FDATE -gt $MAXDATE ]]; then
                                        MAXDATE=$FDATE
                                fi
                        done
        fi
done