Skip to content

Backup Restore Cassandra.

nodetool is being used for backups (snapshots) and restoring.

  • Bash for export cassandra

Create export.sh

Bash
#!/bin/bash

keyspace=$1
bkp_name="bkp-$$"
data_dir="/var/lib/cassandra/data/"

if [ -z "${keyspace}" ]; then
    echo "Usage export.sh [keyspace]"
    exit 1
fi

echo "Create snapshot named: ${bkp_name}"
nodetool snapshot "${keyspace}" -t "${bkp_name}"

echo "Preparing backup file"
for name in $(find  "${data_dir}/${keyspace}/"*"/snapshots/${bkp_name}" -type f); do
        new=$(echo "$name" | sed -e "s#${data_dir}/##g" -e "s#\([^/]\+\)/\([^-]\+\).\+/snapshots/${bkp_name}/\([^/]\+\)\$#\1/\2/\3#g")
        mkdir -p "${bkp_name}/$(dirname $new)"
        cp "$name" "${bkp_name}/$new"
done

echo "Remove snapshot named: ${bkp_name}"
nodetool clearsnapshot -t "${bkp_name}" "${keyspace}"

echo "Dump keyspace and table creation instruction"
cqlsh -e "desc \"${keyspace}\";" cassandra1 > "${bkp_name}/${keyspace}.sql"

echo "Create tar file: ${keyspace}-$(date +%Y%m%d).tar.gz"
cd "${bkp_name}"
tar -czf "../${keyspace}-$(date +%Y%m%d).tar.gz" .
cd -

echo "Remove temporary files"
rm -rf "${bkp_name}"
  • Import

Create import.sh

Bash
#!/bin/bash

tar_file=$1
cassandra_server=$2
bkp_name="bkp-$$"

if [ -z "${tar_file}" ]; then
    echo "Usage import.sh [tar file]"
    exit 1
fi

keyspace=$(basename "${tar_file}" ".tar.gz")

mkdir -p "${bkp_name}"

tar -xvzf "${tar_file}" -C "${bkp_name}"

echo "Drop keyspace ${keyspace}"
cqlsh -e "drop keyspace \"${keyspace}\";" ${cassandra_server}

echo "Create empty keyspace: ${keyspace}"
cat "${bkp_name}/${keyspace}.sql" | cqlsh ${cassandra_server}

for dir in "${bkp_name}/${keyspace}/"*; do
    sstableloader -d ${cassandra_server} "${dir}"
done