sstable2json/json2sstable
でエクスポート/インポート.
エクスポート
sstable2jsonコマンドを使います.
# rootで実行 # あらかじめデータを全てディスクに書き込む nodetool flush MyKeyspace -h localhost # JSONでエクスポート sstable2json /var/lib/cassandra/data/MyKeyspace/Scores-1-Data.db > Scores-1-Data.json
結果はこのようにバッチリ.
cat Scores-1-Data.json { "Dana": { "636f75726365": {"deletedAt": -9223372036854775808, "subColumns": [["617274", "3830", 1275403790763000, false], ["6d617468", "313030", 1275403790758000, false]]}, "6772616465": {"deletedAt": -9223372036854775808, "subColumns": [["6e756c6c", "32", 1275403790752000, false]]}}, "Dan": { "636f75726365": {"deletedAt": -9223372036854775808, "subColumns": [["617274", "3937", 1275403790746000, false], ["6d617468", "3837", 1275403790741000, false]]}, "6772616465": {"deletedAt": -9223372036854775808, "subColumns": [["6e756c6c", "31", 1275403790697000, false]]}} }
インポート前にデータを消してみる
そのままインポートしてもつまらないので,データを一部消しちゃいます.
# CLIで接続 cassandra-cli -host localhost -port 9160 # さよなら,Dan del MyKeyspace.Scores['Dan'] row removed. # そして本当にいなくなった get MyKeyspace.Scores['Dan'] Returned 0 results.
インポート
ここまできたら,インポートします.
# 念のためflushしておく nodetool flush MyKeyspace -h localhost # Cassandraを一度停止させる ^C # 元のSSTableは全部消す rm /var/lib/cassandra/data/MyKeyspace/*.db # JSONファイルをインポート # キースペース名とカラムファミリ名は指定必須 json2sstable -K MyKeyspace -c Scores Scores-1-Data.json /var/lib/cassandra/data/MyKeyspace/Scores-1-Data.db # おもむろに起動 cassandra -f
おかえりDan
復旧後の確認をしてみる.
# 生き返った! get MyKeyspace.Scores['Dan'] => (super_column=grade, (column=null, value=1, timestamp=1275403790697000)) => (super_column=cource, (column=art, value=97, timestamp=1275403790746000) (column=math, value=87, timestamp=1275403790741000)) Returned 2 results.