beta

MongoDBのフルレストア方法まとめ

購入から4年間、24時間365日サーバーとして稼働していたIntel NUCがお亡くなりになって、中で稼働していたMongoDBをフルレストアする必要があったので、作業方法を備忘録として残します。

公開日:2020年12月15日

バックアップファイルを確保

まず、大前提としてバックアップファイルがなければフルレストアはほぼ不可能です。今回は、日次でmongodumpで全てのDBのファイルを自動バックアップしてあったので、そこからレストアします。

mongodumpの最終バックアップが午前3時で、お亡くなりになったのが4時だったので1時間の差分は無視します。(無視しても影響が少ないバッチサーバーなので)

MongoDBをDockerで起動する

まずはMongoDBサーバーを立ち上げます。以前はUbuntuに直接インストールしていたのですが、4年も経って現在はほとんどをDockerに移行しているので、この機会にMongoDBサーバーもDockerに移行させます。

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./db:/data/db
      - ./configdb:/data/configdb

特別解説は必要ないかと思いますが、volumesのdbとconfigdbのローカルマウントは絶対やった方がいいです。何かの原因でコンテナが落ちた時にまたレストアする必要が出てきてしまいます。

なお、今回は社内イントラのみのサーバーなので、ID・パスワードの設定はしていません。

ローカルにMongo Shellなどを入れる

MongoDBのレストアには「mongorestore」というコマンドが必要なので、ローカル(macOS)にmongoをインストールします。

おなじみのbrewで入れようとすると、、、

Error: No available formula or cask with the name "mongodb".

こちらによると、公式のMongoDBはOSS(オープンソースソフトウェア)出なくなったからだとか。

現在はコミュニティ版があるようなのでインストールします。

brew tap mongodb/brew

brew install mongodb-community

これでmongorestoreが使えようになりました。

なお、Mongo shellだけをインストールすることも可能ですが、Mongo shellには「mongodump」「mongorestore」が内包されていないので要注意です。

新MongoDBサーバーにレストアする

さてここまで来たらレストアすればおしまいです。

バックアップファイル(.bsonファイル)のあるディレクトリで下記のコマンドを実行します。

mongorestore -h MongoDBサーバーのIPアドレス -p 27017 --authenticationDatabase admin -u ユーザー名 -p パスワード -d DB名 .

自動的にレストアが始まります。

あとはMongoDB Compassなどのクライアントでデータがきちんと再現できているかをチェックすればOKです。


MongoDBのフルレストア方法でした。

DBは基本的に放置プレイなのでこういうイレギュラー時の対応を忘れがちなのと、MongoDBは現在は下火なのか情報が少ないので、自分でも探すのが大変だったので備忘録として残しました。

Author

Koji Kadoma
Member of codit.work

新着ノート

新着コード