注意備份的時候schema也要備份一下,否則不能恢複快照!
1.備份單個keyspace schema
<code>cqlsh -e "DESC KEYSPACE user" > user_schema.cql</code>
2.備份整個database schema
<code>cqlsh -e "DESC SCHEMA" > 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" > 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 是源叢集的資料目錄。根據你的實際情況修改之。
執行腳本的時候,控制台會列印出目前備份的進度。