删除特定的 Cassandra 快照
Deleting specific Cassandra snapshots
我知道有一个命令,
nodetool -h localhost -p 7199 clearsnapshot
这将删除所有快照,但我只想删除特定的快照 - 由于权限配置错误,在让节点能够拍摄快照时遇到了一些麻烦,在进行故障排除时我今天生成了多个快照,我想删除这些快照保留其他人。
我可以只进入每个节点的单独快照目录并手动删除我想删除的快照吗?
Can I just go into the individual snapshots directories for each node
and manually delete the snapshots I want to get rid of?
是的。
只要确保您不需要它们即可。快照是为了您的安全。所以如果你不小心截断了它,你可以恢复 table
也许将它们备份到 s3。 OpsCenter 通过点击界面为您完成此操作。
您可以手动删除单个快照或使用 -t 选项,如下所示:
"nodetool clearsnapshot -t snapshot_name".
名称是拍摄快照的纪元时间。
clearsnapshot 命令所做的只是递归删除 "snapshots" 目录中的指定快照。
参见:
"Can I just go into the individual snapshots directories for each node and manually delete the snapshots I want to get rid of?"
是的。
这是我用来自动执行的 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 }')
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 "="}')
for SNAPSHOT in $FILEDATELIST
do
#split with awk
FDATE=$(echo $SNAPSHOT | awk -F= '{print }')
SNAME=$(echo $SNAPSHOT | awk -F= '{print }')
#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
我知道有一个命令,
nodetool -h localhost -p 7199 clearsnapshot
这将删除所有快照,但我只想删除特定的快照 - 由于权限配置错误,在让节点能够拍摄快照时遇到了一些麻烦,在进行故障排除时我今天生成了多个快照,我想删除这些快照保留其他人。
我可以只进入每个节点的单独快照目录并手动删除我想删除的快照吗?
Can I just go into the individual snapshots directories for each node and manually delete the snapshots I want to get rid of?
是的。
只要确保您不需要它们即可。快照是为了您的安全。所以如果你不小心截断了它,你可以恢复 table
也许将它们备份到 s3。 OpsCenter 通过点击界面为您完成此操作。
您可以手动删除单个快照或使用 -t 选项,如下所示:
"nodetool clearsnapshot -t snapshot_name".
名称是拍摄快照的纪元时间。
clearsnapshot 命令所做的只是递归删除 "snapshots" 目录中的指定快照。
参见:
"Can I just go into the individual snapshots directories for each node and manually delete the snapshots I want to get rid of?"
是的。
这是我用来自动执行的 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 }')
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 "="}')
for SNAPSHOT in $FILEDATELIST
do
#split with awk
FDATE=$(echo $SNAPSHOT | awk -F= '{print }')
SNAME=$(echo $SNAPSHOT | awk -F= '{print }')
#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