【问题标题】:Deleting specific Cassandra snapshots删除特定的 Cassandra 快照
【发布时间】:2015-07-01 03:54:16
【问题描述】:

我知道有一个命令,

nodetool -h localhost -p 7199 clearsnapshot

这将删除所有快照,但我只想删除特定的快照 - 由于权限配置错误,让节点能够拍摄快照时遇到了一些麻烦,在进行故障排除时,我今天生成了多个快照,我想删除这些快照同时保留其他人。

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

【问题讨论】:

    标签: cassandra datastax-enterprise


    【解决方案1】:

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

    "nodetool clearsnapshot -t snapshot_name".

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

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

    见:

    deleting snapshots

    【讨论】:

      【解决方案2】:

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

      是的。

      这是我用来自动执行该操作的 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
      

      【讨论】:

        【解决方案3】:

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

        是的。

        只要确保您不需要它们即可。快照是为了您的安全。因此,如果您不小心截断了表格等,您可以恢复表格。

        也许将它们备份到 s3。 OpsCenter 通过点击界面为您做到这一点。

        【讨论】:

          猜你喜欢
          • 2011-07-30
          • 2017-04-25
          • 1970-01-01
          • 1970-01-01
          • 2015-03-10
          • 2020-10-24
          • 1970-01-01
          • 1970-01-01
          • 2022-09-23
          相关资源
          最近更新 更多