LOGO
Yutuo

Cassandra的备份和恢复主要是通过快照(snapshots)来实现的。大概的步骤是通过快照(snapshots)备份数据,恢复时先清空数据表,然后把各表的快照(snapshots)复制到对应表的数据保存目录,覆盖原数据,然后重新加载,数据就恢复了。

生成快照(snapshots)

一般的备份的话,可以直接使用下面的命令:

Bash
# nodetool -h 服务器 -p 端口 snapshot -t 快照名 -kt 数据库名.数据表名, 数据库名.数据表名
nodetool -h localhost -p 7199 snapshot -t testdb_bak -kt testdb.testtable,testdb.testtable2

这个生成好的快照(snapshots)是保存在各个表的数据保存目录下的snapshot/testdb_bak目录下的。

详细的介绍可以参考官方文档:
https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsSnapShot.html

清空数据表

直接在cqlsh下,用truncate table清空就行。比如

SQL
truncate table testtable;
truncate table testtable2;

复制数据

因为快照(snapshots)是保存在各个表的数据保存目录下的,表名上加了Hash码,有些不好找,我们可以直接用find命令来找。

如:

Bash
# Cassandra的默认数据目录是/var/lib/cassandra/data,testdb是数据库名
find /var/lib/cassandra/data/testdb -name testdb_bak

结果大概如下:

/var/lib/cassandra/data/testdb/testtable-9833e8c7ba2211e7bfee07c6e24850aa/snapshots/testdb_bak
/var/lib/cassandra/data/testdb/testtable2-031786cdc51821e79032cb38ee4d787b/snapshots/testdb_bak

然后复制命令如下:

Bash
cd /var/lib/cassandra/data/testdb
\cp -rf ./testtable-9833e8c7ba2211e7bfee07c6e24850aa/snapshots/testdb_bak/* ./testtable-9833e8c7ba2211e7bfee07c6e24850aa
\cp -rf ./testtable2-031786cdc51821e79032cb38ee4d787b/snapshots/testdb_bak/* ./testtable2-031786cdc51821e79032cb38ee4d787b

这样就复制好了。

重新加载

直接使用下面的命令可以重新加载数据。

Bash
# nodetool -h 服务器 -p 端口 refresh -- 数据库名 数据表名
nodetool -h localhost -p 7199 refresh -- testdb testtable
nodetool -h localhost -p 7199 refresh -- testdb testtable2

详细的介绍可以参考官方文档:
https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsRefresh.html

转载请注明:宇托的狗窝 » Cassandra的备份和恢复
上一篇 下一篇
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址