=====Backup=====
Backup in Cassandra is done on either:
- Server Level
- Keyspace(Schema/Database) Level
- Column Family(Table) Level
Cassandra also provides incremental backups, which will discuss later. Furthermore, restore depends if you are restoring the table to a single node or a cluster.
====Server Backup====
[root@lparacassandra newsnap]# nodetool snapshot
Requested creating snapshot(s) for [all keyspaces] with snapshot name [1526571477560] and options {skipFlush=false}
Snapshot directory: 1526571477560
[root@lparacassandra newsnap]#
====Keyspace - Schema/Database - Backup====
[root@lparacassandra ~]# nodetool -h localhost -p 7199 snapshot testkeyspace
Requested creating snapshot(s) for [testkeyspace] with snapshot name [1526547378058] and options {skipFlush=false}
Snapshot directory: 1526547378058
====Keyfamily - Table - Backup====
[root@lparacassandra newsnap]# nodetool snapshot --table testtable testkeyspace
Requested creating snapshot(s) for [testkeyspace] with snapshot name [1526571643515] and options {skipFlush=false}
Snapshot directory: 1526571643515
[root@lparacassandra newsnap]#
=====Restore=====
====Table Restore====
Restore is done pretty simple in Cassandra, although it can be pain sometimes:
- Create the schema if not created already.
- Truncate the table,if necessary.
- Locate the snapshot folder(/var/lib/keyspace_name/table_name UUID/snapshots/snapshot_name) and copy the snapshot SSTable directory to the /var/lib/keyspace/table_name-UUID directory.
- Run nodetool refresh.
cqlsh:testkeyspace> select * from testTable;
id | name
----+--------
1 | Julien
(1 rows)
cqlsh:testkeyspace> truncate table testTable;
cqlsh:testkeyspace>
cqlsh:testkeyspace>
[root@lparacassandra testtable-d1d2aa6059e411e8a087c7aceeb1b122]# cp snapshots/newsnap/* .
[root@lparacassandra testtable-d1d2aa6059e411e8a087c7aceeb1b122]# ls -lart
total 44
drwxr-xr-x 2 cassandra cassandra 6 May 17 11:13 backups
drwxr-xr-x 4 cassandra cassandra 106 May 17 11:13 ..
drwxr-xr-x 4 cassandra cassandra 62 May 17 11:15 snapshots
-rw-r--r-- 1 root root 836 May 17 11:16 schema.cql
-rw-r--r-- 1 root root 92 May 17 11:16 mc-1-big-TOC.txt
-rw-r--r-- 1 root root 56 May 17 11:16 mc-1-big-Summary.db
-rw-r--r-- 1 root root 4606 May 17 11:16 mc-1-big-Statistics.db
-rw-r--r-- 1 root root 8 May 17 11:16 mc-1-big-Index.db
-rw-r--r-- 1 root root 16 May 17 11:16 mc-1-big-Filter.db
-rw-r--r-- 1 root root 10 May 17 11:16 mc-1-big-Digest.crc32
-rw-r--r-- 1 root root 37 May 17 11:16 mc-1-big-Data.db
-rw-r--r-- 1 root root 43 May 17 11:16 mc-1-big-CompressionInfo.db
-rw-r--r-- 1 root root 31 May 17 11:16 manifest.json
drwxr-xr-x 4 cassandra cassandra 297 May 17 11:16 .
[root@lparacassandra testtable-d1d2aa6059e411e8a087c7aceeb1b122]# chown -R cassandra:cassandra *
[root@lparacassandra testtable-d1d2aa6059e411e8a087c7aceeb1b122]# ls -lart
total 44
drwxr-xr-x 2 cassandra cassandra 6 May 17 11:13 backups
drwxr-xr-x 4 cassandra cassandra 106 May 17 11:13 ..
drwxr-xr-x 4 cassandra cassandra 62 May 17 11:15 snapshots
-rw-r--r-- 1 cassandra cassandra 836 May 17 11:16 schema.cql
-rw-r--r-- 1 cassandra cassandra 92 May 17 11:16 mc-1-big-TOC.txt
-rw-r--r-- 1 cassandra cassandra 56 May 17 11:16 mc-1-big-Summary.db
-rw-r--r-- 1 cassandra cassandra 4606 May 17 11:16 mc-1-big-Statistics.db
-rw-r--r-- 1 cassandra cassandra 8 May 17 11:16 mc-1-big-Index.db
-rw-r--r-- 1 cassandra cassandra 16 May 17 11:16 mc-1-big-Filter.db
-rw-r--r-- 1 cassandra cassandra 10 May 17 11:16 mc-1-big-Digest.crc32
-rw-r--r-- 1 cassandra cassandra 37 May 17 11:16 mc-1-big-Data.db
-rw-r--r-- 1 cassandra cassandra 43 May 17 11:16 mc-1-big-CompressionInfo.db
-rw-r--r-- 1 cassandra cassandra 31 May 17 11:16 manifest.json
[root@lparacassandra newsnap]# nodetool refresh testkeyspace testtable
[root@lparacassandra newsnap]# cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh> use testkeyspace
... ;
cqlsh:testkeyspace> select * from testtable;
id | name
----+--------
1 | Julien