ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

CrowiサーバからGrowiサーバへのMongoDBのバックアップ、リストアに失敗

WikiサーバとしてCrowi-plusを運用していて、Growiサーバーへ移行したいという要望があるかもしれません。まず、移行については、こちらの記事が参考になります。ちなみに、Growiはメルカリなどでも利用されている実績があります。フリーで使えるので、気軽に始められておすすめです。

 

Crowi オンプレミスからの移行

Home · weseek/growi Wiki · GitHub

 

概要

オフィシャル オンプレミス v1.6.x から、GROWI オンプレミス v3.x への移行を想定MongoDB は既存のものをそのまま利用することを想定Redis は既存のものをそのまま利用することを想定、もしくは利用しなくても構わないv3.0.7 以降では、REDIS_URL が設定されていない場合は MongoDB をセッションストアとして利用するElasticSearch サーバーはバージョンアップとプラグイン追加が必要となる

 

 

基本はこの通りすれば問題ありません。

 

事前準備

# clone

git clone https://github.com/weseek/growi.gitcd growi

# install dependencies and build client

yarnnpm run build:prod

 

では、別で試したのが、データベースの移行です。Growi構築した後に、データ情報をバックアップしたいという要望があると思います。移行も含めてバックアップを取得したい場合は、MongoDBによるバックアップ取得も可能です。

 

続いて、MongoDBによるバックアップ、リストア手順を紹介します。

まずは、MongoDBに接続してデータベースを確認します。crowiの場合は「crowi」というデータベースができています。


# mongo

> show dbs;

admin   0.000GBconfig  0.000GBcrowi   0.006GBlocal   0.000GB

基本はサービス無停止でのバックアップを想定しています。今回は、「tmp」フォルダへバックアップを取得します。「mongodump」コマンドを使います。
# mongodump -d crowi -o /tmp

 

バックアップは以下のような「~.json」と「~.bson」ができます。

# ls

attachments.bson                pages.metadata.jsonattachments.metadata.json       revisions.bsonbookmarks.bson                  revisions.metadata.jsonbookmarks.metadata.json         sessions.bsoncomments.bson                   sessions.metadata.jsoncomments.metadata.json          updateposts.bsonconfigs.bson                    updateposts.metadata.jsonconfigs.metadata.json           usergroups.bsonexternalaccounts.bson           usergroups.metadata.jsonexternalaccounts.metadata.json  users.bsonpages.bson                      users.metadata.json

 

続いて、リストアです。リストアは「mongorestore」を使用します。オプション「--drop」がないとエラーがでるので使用します。これは、元のデータを削除することを意味します。


# mongorestore -d growi --drop /tmp/crowi/

2018-xx-xxTxx:43:52.375+0900    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead2018-xx-xxTxx:43:52.375+0900    building a list of collections to restore from /tmp/growi dir2018-xx-xxTxx:43:52.403+0900    reading metadata for growi.revisions from /tmp/growi/revisions.metadata.json2018-xx-xxTxx:43:52.413+0900    reading metadata for growi.users from /tmp/growi/users.metadata.json2018-xx-xxTxx:43:52.426+0900    reading metadata for growi.pages from /tmp/growi/pages.metadata.json2018-xx-xxTxx:43:52.432+0900    reading metadata for growi.configs from /tmp/growi/configs.metadata.json2018-xx-xxTxx:43:52.448+0900    restoring growi.revisions from /tmp/growi/revisions.bson2018-xx-xxTxx:43:52.457+0900    restoring growi.users from /tmp/growi/users.bson2018-xx-xxTxx:43:52.464+0900    restoring growi.pages from /tmp/growi/pages.bson2018-xx-xxTxx:43:52.472+0900    restoring growi.configs from /tmp/growi/configs.bson2018-xx-xxTxx:43:52.476+0900    restoring indexes for collection growi.pages from metadata2018-xx-xxTxx:43:52.476+0900    restoring indexes for collection growi.users from metadata2018-xx-xxTxx:43:52.478+0900    no indexes to restore2018-xx-xxTxx:43:52.478+0900    finished restoring growi.revisions (8 documents)2018-xx-xxTxx:43:52.508+0900    restoring indexes for collection growi.configs from metadata2018-xx-xxTxx:43:52.511+0900    reading metadata for growi.sessions from /tmp/growi/sessions.metadata.json2018-xx-xxTxx:43:52.520+0900    finished restoring growi.users (1 document)2018-xx-xxTxx:43:52.521+0900    finished restoring growi.pages (8 documents)2018-xx-xxTxx:43:52.527+0900    restoring growi.sessions from /tmp/growi/sessions.bson2018-xx-xxTxx:43:52.536+0900    reading metadata for growi.comments from /tmp/growi/comments.metadata.json2018-xx-xxTxx:43:52.541+0900    reading metadata for growi.attachments from /tmp/growi/attachments.metadata.json2018-xx-xxTxx:43:52.542+0900    restoring indexes for collection growi.sessions from metadata2018-xx-xxTxx:43:52.544+0900    finished restoring growi.configs (41 documents)2018-xx-xxTxx:43:52.551+0900    restoring growi.comments from /tmp/growi/comments.bson2018-xx-xxTxx:43:52.557+0900    restoring indexes for collection growi.comments from metadata2018-xx-xxTxx:43:52.563+0900    restoring growi.attachments from /tmp/growi/attachments.bson2018-xx-xxTxx:43:52.571+0900    restoring indexes for collection growi.attachments from metadata2018-xx-xxTxx:43:52.578+0900    finished restoring growi.sessions (1 document)2018-xx-xxTxx:43:52.583+0900    reading metadata for growi.bookmarks from /tmp/growi/bookmarks.metadata.json2018-xx-xxTxx:43:52.598+0900    reading metadata for growi.updateposts from /tmp/growi/updateposts.metadata.json2018-xx-xxTxx:43:52.605+0900    restoring growi.bookmarks from /tmp/growi/bookmarks.bson2018-xx-xxTxx:43:52.612+0900    restoring indexes for collection growi.bookmarks from metadata2018-xx-xxTxx:43:52.619+0900    finished restoring growi.comments (0 documents)2018-xx-xxTxx:43:52.619+0900    finished restoring growi.attachments (0 documents)2018-xx-xxTxx:43:52.619+0900    restoring growi.updateposts from /tmp/growi/updateposts.bson2018-xx-xxTxx:43:52.626+0900    restoring indexes for collection growi.updateposts from metadata2018-xx-xxTxx:43:52.639+0900    reading metadata for growi.externalaccounts from /tmp/growi/externalaccounts.metadata.json2018-xx-xxTxx:43:52.642+0900    reading metadata for growi.usergroups from /tmp/growi/usergroups.metadata.json2018-xx-xxTxx:43:52.649+0900    finished restoring growi.updateposts (0 documents)2018-xx-xxTxx:43:52.650+0900    restoring growi.externalaccounts from /tmp/growi/externalaccounts.bson2018-xx-xxTxx:43:52.658+0900    restoring indexes for collection growi.externalaccounts from metadata2018-xx-xxTxx:43:52.660+0900    finished restoring growi.bookmarks (0 documents)2018-xx-xxTxx:43:52.665+0900    restoring growi.usergroups from /tmp/growi/usergroups.bson2018-xx-xxTxx:43:52.667+0900    restoring indexes for collection growi.usergroups from metadata2018-xx-xxTxx:43:52.673+0900    finished restoring growi.externalaccounts (0 documents)2018-xx-xxTxx:43:52.673+0900    finished restoring growi.usergroups (0 documents)2018-xx-xxTxx:43:52.673+0900    done

 

以上でバックアップ、リストアは完了です。ただ、GROWIへ接続してチェックをすると確かにデータ自体はリストアされているんですが、階層構造がおかしくなっていますね。ちなみに、同一筐体内でのバックアップ、リストアは正常に動作したので、異なるサーバー間でのバックアップ、リストアはアプリケーションによっては正常に表示されない可能性があります。

 

また、定期的に実行したい場合は、cronなどで定期実行しておくといいですね。MongoDBのバックアップ、リストアはそれほど難しくないのがいいですね。