データのバックアップとリストア

Jijiのデータをバックアップ/リストアする手順を解説します。

エージェントのコードやバックテストの結果、通知、ログ、設定情報などすべてのデータは、 MongoDB に格納されています。 このデータをバックアップすれば、あとで環境を復元できます。

MongoDB 内のデータのうち、利用者のメールアドレス、およびSMTPサーバーのアカウント/パスワードは、暗号化して格納されています。 暗号化には以下のキーを使用しており、この値が変わるとデータを復号できなくなります。

  • Herokuの場合、セットアップ時に内部で生成される SECRET_KEY 変数
  • AWS/Dockerの場合、docker-compose.ymlUSER_SECRET 変数

別の環境にデータを移した場合など、この値が変わった場合は、リストア後に設定画面から値を再設定する必要がありますのでご注意ください。

※バックアップ/リストアには mongodump mongorestore など MongoDB Tools に含まれるコマンドが必要です。 ご利用の環境に合わせたものを、こちらから事前にインストールしておいてください。

Herokuにインストールしている場合

前準備:

Heroku にインストールした場合、クラウド型のMongoDBサービスの MongoLab を利用するように設定されています。 最初に、 MongoLab の管理画面にアクセスし、データベースのホスト名とデータベース名を取得します。 また、バックアップを実行するユーザーも作成します。

  1. Heroku にログインして、 Dashboard からアプリを選択します。 アプリを選択

  2. Add-onsMongoLab をクリックします。 MongoLabの管理画面へ

  3. MongoLab の管理画面が開くので、データベースのホスト名とデータベース名をメモしておきます。 MongoLabの管理画面

  4. 次に Users タブを選択して、 Add database user からバックアップで使用するユーザーを作成します。 バックアップ用ユーザーの作成

以上で前準備は終わりです。


バックアップ:

以下を実行します。

$ mongodump -h <データベースホスト名> -d <データベース名> -u <バックアップ用ユーザー名> -p <バックアップ用ユーザーのパスワード> -o <バックアップの保存先ディレクトリ>

バックアップの保存先ディレクトリの下にデータベース名でディレクトリが作成され、その中にバックアップデータが出力されます。リストア時には、データベース名のディレクトリを指定します。


リストア:

システムを一旦停止します。

$ heroku ps:scale web=0 --app <Herokuのアプリ名>

MongoLab管理画面のCollectionsタブから、すべてのコレクションを削除します。

コレクションの削除

以下を実行してデータベースをリストアします。

$ mongorestore --batchSize=100 -h <データベースホスト名> -d <データベース名> -u <バックアップ用ユーザー名> -p <バックアップ用ユーザーのパスワード> <バックアップの保存先ディレクトリ>

システムを再起動します。

$ heroku ps:scale web=1 --app <Herokuのアプリ名>

新しく構築した環境にデータを移した場合は、メールアドレスとSMTPサーバーの設定を再度行ってください。

AWS,Dockerにインストールしている場合

バックアップ:

jiji_mongodb コンテナが動作している状態で、以下を実行します。

$ mongodump  -d jiji --port <mongodbが動作しているポート:デフォルト27018> -o <バックアップの保存先ディレクトリ>

バックアップの保存先ディレクトリの下にデータベース名でディレクトリが作成され、その中にバックアップデータが出力されます。リストア時には、データベース名のディレクトリを指定します。


リストア:

システム全体を一旦停止し、jiji_mongodb コンテナだけを起動します。

$ sudo docker-compose stop
$ sudo docker start jiji_mongodb

jiji_mongodb コンテナの jiji データベースを削除します。

$ mongo --port <mongodbが動作しているポート:デフォルト27018>
> show dbs
jiji   0.203GB
local  0.078GB
> use jiji
switched to db jiji
> db.dropDatabase()
{ "dropped" : "jiji", "ok" : 1 }
> show dbs
local  0.078GB
> exit

以下を実行してデータベースをリストアします。

$ mongorestore -d jiji --batchSize=100 --port <mongodbが動作しているポート:デフォルト27018> <バックアップの保存先ディレクトリ>

システムを再起動します。

$ sudo docker-compose start

新しく構築した環境にデータを移した場合は、メールアドレスとSMTPサーバーの設定を再度行ってください。