在本文中,我们将讨论如何备份和恢复数据,并讨论在 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