天天看點

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 是源叢集的資料目錄。根據你的實際情況修改之。

執行腳本的時候,控制台會列印出目前備份的進度。