天天看点

cassandra数据备份与迁移

注意备份的时候schema也要备份一下,否则不能恢复快照!

1.备份单个keyspace schema

<code>cqlsh -e "DESC KEYSPACE user" &gt; user_schema.cql</code>

2.备份整个database schema

<code>cqlsh -e "DESC SCHEMA" &gt; db_schema.cql</code>

3.导入keyspace schema

在 user_schema.cql所在的目录下打开cqlsh:

<code>source 'user_schema.cql'</code>

4.导入database schema:

在db_schema.cql所在的目录下打开cqlsh:

<code>source 'db_schema.cql'</code>

5.备份单个keyspace数据

<code>bin/nodetool snapshot -t 20171130 user</code>

6.备份所有的keyspace

<code>bin/nodetool snapshot -t 20171130</code>

-t后面指定快照的名字,备份好的数据在这个目录下

<code>$CASSANDRA_HOME/data/yourkeyspace/table-uuid/snapshots/20171130</code>

7.使用脚本将快照拷贝出来

将如下脚本保存为copy.sh,注意修改keyspacePath和dstKeyspacePath的值。 这个脚本只拷贝某一个keyspace的快照

给脚本赋予执行权限:

<code>chmod +x ./copy.sh</code>

执行脚本:

<code>./copy.sh</code>

8.恢复快照

将dstKeyspacePath下的SSTable(table-uuid)目录拷贝到新的cassandra的Data目录下,执行如下命令即可

<code>bin/nodetool refresh</code>

直接从一个集群导到另一个集群:

1.memTable数据刷新到SSTable

<code>bin/nodetool flush</code>

2.源集群导出schema

<code>cqlsh 192.168.40.x -e "DESC KEYSPACE your_keyspace" &gt; your_keyspace_schema.cql</code>

将<code>your_keyspace_schema.cql</code> 拷贝到目录集群某个目录下,然后进入到这个目录,打开cqlsh。

<code>source 'your_keyspace_schema.cql'</code>

3.使用脚本直接导数据

该脚本只能导一个keyspace

将如下脚本保存为 <code>migrate.sh</code>,注意修改keyspacePath和dstClusterIP。keyspacePath是源集群的keyspace所在目录,dstClusterIP是目标集群的IP,可以是多个。

脚本赋上执行权限:

<code>chmod +x ./migrate.sh</code>

执行脚本,(请确保你的<code>PATH</code>环境变量里配置过Cassandra的路径)

<code>./migrate.sh</code>

如果要备份所有的数据:

dstClusterIP 后面指定的是目标集群的IP,可以是多个IP。根据你的实际情况修改之。

srcDataPath 是源集群的数据目录。根据你的实际情况修改之。

执行脚本的时候,控制台会打印出当前备份的进度。