📜  Cassandra 中的数据备份和恢复

📅  最后修改于: 2021-09-10 01:59:08             🧑  作者: Mango

在本文中,我们将讨论如何备份和恢复数据,并讨论在 Cassandra 中恢复数据的方式有多少。我们可以通过使用快照、使用 sstableloader 实用程序以及使用 nodetool 刷新来恢复我们的数据。

让我们一一讨论。

首先,我们将创建用于备份数据的密钥空间。让我们通过一个示例练习来讨论这个问题。

创建密钥空间:

create keyspace backup_copy 
with replication = { 'class' : 'SimpleStrategy', 
                     'replication_factor': 2 }; 

现在,我们在这里使用 backup_copy 密钥空间。

use backup_copy ;  

现在,我们将创建用于备份目的的表。在下面给定的 CQL 查询 facebook_user 是一个表名,其中 login_time、user_name 和 post 是字段。
我们来看一下。

create table facebook_user
 (
  login_time timeuuid primary key, 
  user_name text, 
  post set
 ); 

让我们看看表架构。

describe table facebook_user; 

输出:

现在,我们将插入一些数据用于备份和恢复目的。我们来看一下。

Insert into facebook_user(login_time, user_name, post) 
values(now(), 'Ashish', {'join webinar at 10:00 am'});

Insert into facebook_user(login_time, user_name, post) 
values(now(), 'Rana', {'join Cassandra meetup at 10:00 am'}); 

现在,让我们使用 select 命令验证记录是否已成功保存。我们来看一下。

select * 
from facebook_user; 

输出:

要拍摄快照,我们需要使用 nodetool 实用程序:

nodetool -h localhost -p 7199 snapshot facebook_user 

这里,7199 是端口号。

请求为 facebook_user 创建快照。

Snapshot directory: 1205514051242

输出显示在本地节点上运行 nodetool 快照已在 $CASSANDRA_DATA_DIR/backup_copy/facebook_user 文件夹下创建了一个快照 1205514051242。这里 $CASSANDRA_DATA_DIR 是在 Cassandra.yaml 文件中为 data_file_directories 属性定义的值

要首先恢复数据,我们需要删除一些可以恢复的数据。我们来看一下。

truncate facebook_user; 

使用 sstableloader 实用程序恢复数据:
首先,我们需要将 Snapshot 目录中的所有 .db 文件复制到一个应与数据库架构同步的文件夹中,即键空间/表名称。在我们的例子中,它应该是backup_copy(/home/Ashish/backup_copy/facebook_user)下的用户文件夹facebook_user。

现在,让我们执行 sstableloader。

$CASSANDRA_HOME/bin/sstableloader -d localhost /home/Ashish/backup_copy/facebook_user 

现在,这是它将如何执行。我们来看一下。

Established connection to initial hosts
Opening sstables and calculating sections to stream
Streaming relevant part of /home/Ashish/backup_copy/facebook_user/facebook_user-jb-1-Data.db to
[/127.0.0.1, /127.0.0.2, /127.0.0.3]
progress: [/127.0.0.2 1/1 (100%)] [/127.0.0.3 1/1 (100%)] [total: 100% - 0MB/s (avg: 0MB/s)] 

完成后,我们可以通过运行 select 命令来验证数据是否已恢复。
上述 CQL 查询完成后,我们可以使用下面给出的以下 CQL 查询来验证数据是否已恢复。

select * 
from backup_copy.facebook_user; 

输出:

使用 nodetool 刷新:
这是我们可以使用 nodetool refresh 实用程序恢复数据的方法之一,它与 sstableloader 方法不同。在这里,我们需要手动复制 Cassandra 数据目录中的 .db 文件。

要运行 nodetool refresh 命令,请使用下面给出的以下 CQL 查询。我们来看一下。

$CASSANDRA_HOME/bin/nodetool refresh backup_copy facebook_user 

使用清除快照:

$CASSANDRA_HOME/bin/nodetool -h localhost -p 7199 clearsnapshot