[MongoDB]サーバ間でデータ移管する方法(ダンプ&リストア編)

MongoDBで、サーバAからサーバBにデータを移管する必要があったのでやってみました。

要件

MongoDBにログデータを保存しているとして、直近のログとアーカイブ用のログが別々のサーバに保存されている状況を想像してください。

  • サーバAに新しいログデータ(DB名:newdb)があり、サーバBに古いログデータ(DB名:olddb)がある。
  • ここで、サーバAにあるデータを全部サーバBに移管してデータを統合したい。
    (サーバBにもとからあるデータは消さずに、そこに新レコードを追記したい)

つまりサーバAのデータをサーバBにマージしたいという話。

やり方

普通にダンプしてリストアするだけです(mongodumpしてmongorestore)。
mongorestoreは普通に使うと「追記」が行われるので、このケースにはもってこいです。
準備
作業ミスが怖いので、事前に両方のデータをバックアップしておきます。
ダンプ
サーバAで
mongodump --db newdb --out  /tmp/mongodump
ずらずらとbsonファイルが出力されます。

/tmp/mongodump/newdb/userlog.bson
/tmp/mongodump/newdb/system.indexes.bson
ダンプデータを転送
rsync -avz /tmp/mongodump hostB:/tmp/
リストア
サーバBで
sudo /etc/init.d/mongod stop # デーモンを止めておく
sudo mongorestore --dbpath /data/db --db olddb /tmp/mongodump/newdb
これで、サーバAのデータがサーバBに追記されます。
レコード件数やデータの中身をチェックして、問題なければサーバAのデータを削除します。
mongo hostA/newdb
> db.dropDatabase();

まとめ

こんな感じです。

実際に本番でやる場合は、ちゃんとリハーサルとか練習してからやりましょうね☆

次回は、この処理をMongoShellを使ってJavaScriptコードでやる方法を紹介します。
お楽しみに!
カテゴリ:

人気記事