Growi構築した後に、データ情報をバックアップしたいという要望があると思います。しっかりとしたストレージがあれば、ストレージ機能でバックアップを取得することは可能ですが、中小企業の場合、バックアップの仕組みがない場合もあると思います。


Growiサーバ側でバックアップを取得したい場合は、MongoDBによるバックアップ取得も可能です。では、MongoDBによるバックアップ、リストア手順を紹介します。


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

# mongo
> show dbs;
admin   0.000GB
config  0.000GB
growi   0.001GB
local   0.000GB


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

# mongodump -d growi -o /tmp


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

# ls
attachments.bson                pages.metadata.json
attachments.metadata.json       revisions.bson
bookmarks.bson                  revisions.metadata.json
bookmarks.metadata.json         sessions.bson
comments.bson                   sessions.metadata.json
comments.metadata.json          updateposts.bson
configs.bson                    updateposts.metadata.json
configs.metadata.json           usergroups.bson
externalaccounts.bson           usergroups.metadata.json
externalaccounts.metadata.json  users.bson
pages.bson                      users.metadata.json


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

# mongorestore -d growi --drop /tmp/growi/
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 instead
2018-xx-xxTxx:43:52.375+0900    building a list of collections to restore from /tmp/growi dir
2018-xx-xxTxx:43:52.403+0900    reading metadata for growi.revisions from /tmp/growi/revisions.metadata.json
2018-xx-xxTxx:43:52.413+0900    reading metadata for growi.users from /tmp/growi/users.metadata.json
2018-xx-xxTxx:43:52.426+0900    reading metadata for growi.pages from /tmp/growi/pages.metadata.json
2018-xx-xxTxx:43:52.432+0900    reading metadata for growi.configs from /tmp/growi/configs.metadata.json
2018-xx-xxTxx:43:52.448+0900    restoring growi.revisions from /tmp/growi/revisions.bson
2018-xx-xxTxx:43:52.457+0900    restoring growi.users from /tmp/growi/users.bson
2018-xx-xxTxx:43:52.464+0900    restoring growi.pages from /tmp/growi/pages.bson
2018-xx-xxTxx:43:52.472+0900    restoring growi.configs from /tmp/growi/configs.bson
2018-xx-xxTxx:43:52.476+0900    restoring indexes for collection growi.pages from metadata
2018-xx-xxTxx:43:52.476+0900    restoring indexes for collection growi.users from metadata
2018-xx-xxTxx:43:52.478+0900    no indexes to restore
2018-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 metadata
2018-xx-xxTxx:43:52.511+0900    reading metadata for growi.sessions from /tmp/growi/sessions.metadata.json
2018-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.bson
2018-xx-xxTxx:43:52.536+0900    reading metadata for growi.comments from /tmp/growi/comments.metadata.json
2018-xx-xxTxx:43:52.541+0900    reading metadata for growi.attachments from /tmp/growi/attachments.metadata.json
2018-xx-xxTxx:43:52.542+0900    restoring indexes for collection growi.sessions from metadata
2018-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.bson
2018-xx-xxTxx:43:52.557+0900    restoring indexes for collection growi.comments from metadata
2018-xx-xxTxx:43:52.563+0900    restoring growi.attachments from /tmp/growi/attachments.bson
2018-xx-xxTxx:43:52.571+0900    restoring indexes for collection growi.attachments from metadata
2018-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.json
2018-xx-xxTxx:43:52.598+0900    reading metadata for growi.updateposts from /tmp/growi/updateposts.metadata.json
2018-xx-xxTxx:43:52.605+0900    restoring growi.bookmarks from /tmp/growi/bookmarks.bson
2018-xx-xxTxx:43:52.612+0900    restoring indexes for collection growi.bookmarks from metadata
2018-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.bson
2018-xx-xxTxx:43:52.626+0900    restoring indexes for collection growi.updateposts from metadata
2018-xx-xxTxx:43:52.639+0900    reading metadata for growi.externalaccounts from /tmp/growi/externalaccounts.metadata.json
2018-xx-xxTxx:43:52.642+0900    reading metadata for growi.usergroups from /tmp/growi/usergroups.metadata.json
2018-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.bson
2018-xx-xxTxx:43:52.658+0900    restoring indexes for collection growi.externalaccounts from metadata
2018-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.bson
2018-xx-xxTxx:43:52.667+0900    restoring indexes for collection growi.usergroups from metadata
2018-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


以上でバックアップ、リストアは完了です。リストア後は、データが復旧したこともそうですが、全文検索ができることなど、機能的にも問題がないことを確認しておきます。


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