すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:物理バックアップによるセルフマネージド MongoDB データベースへのインスタンスデータの復元

最終更新日:Jun 25, 2026

このトピックでは、物理バックアップファイルを使用して、ApsaraDB for MongoDB インスタンスからスタンドアロンモードまたはレプリカセットモードのセルフマネージド MongoDB データベースにデータを復元する方法を説明します。

前提条件

  • インスタンスはレプリカセットインスタンスです。

  • インスタンスはローカルディスクを使用してデータを保存します。

  • インスタンスの透過的なデータ暗号化 (TDE) 機能が無効になっています。 詳細については、「インスタンスの TDE の設定」をご参照ください。

  • インスタンスのストレージエンジンは WiredTiger または RocksDB です。 インスタンスのストレージエンジンが TerarkDB の場合、論理バックアップを使用してインスタンスデータをセルフマネージドデータベースに復元できます。 詳細については、「論理バックアップを使用した、セルフマネージド MongoDB データベースへのインスタンスデータの復元」をご参照ください。

    説明
    • ApsaraDB for MongoDB コンソールの基本情報 ページで、インスタンスのストレージエンジンを確認できます。

    • インスタンスのストレージエンジンが RocksDB の場合、RocksDB ストレージエンジンを搭載した MongoDB アプリケーションをコンパイルしてインストールする必要があります。

データベースバージョンの要件

インスタンスのバージョンは、セルフマネージド MongoDB データベースのバージョンに対応している必要があります。 次の表に、インスタンスとセルフマネージド MongoDB データベースのマッピングを示します。

ApsaraDB for MongoDB インスタンス

セルフマネージド MongoDB データベース

MongoDB 3.2

MongoDB 3.2 または 3.4

MongoDB 3.4

MongoDB 3.4

MongoDB 4.0

MongoDB 4.0

MongoDB 4.2

MongoDB 4.2

物理バックアップファイルのフォーマット

物理バックアップファイルフォーマット

ファイル名拡張子

説明

TAR

.tar.gz

2019年3月26日より前に作成された ApsaraDB for MongoDB インスタンスの物理バックアップファイルは、.tar フォーマットです。

xbstream

_qp.xb

2019年3月26日以降に作成された ApsaraDB for MongoDB インスタンスの物理バックアップファイルは、.xbstream フォーマットです。

説明

.xbstream フォーマットは Linux でのみ使用できます。 Windows では、.xbstream フォーマットのファイルの解凍に必要な Percona XtraBackup ツールがサポートされていないため、.xbstream フォーマットは使用できません。

環境

  • 次の手順では、Ubuntu 16.04 64 ビットイメージから作成された Elastic Compute Service (ECS) インスタンスを使用します。 ECS インスタンスの作成方法の詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。

  • 必要なバージョンの MongoDB が ECS インスタンスにインストールされています。 MongoDB のインストール方法の詳細については、「MongoDBドライバーの追加」をご参照ください。

  • セルフマネージド MongoDB データベースの環境変数が ECS インスタンスに設定されています。 コマンドを実行するときに、実行可能ファイルのパスを再度入力する必要はありません。 詳細については、「ステップ1:環境変数の設定」をご参照ください。

  • ECS インスタンスの /test/mongo/data ディレクトリは、レプリカセットインスタンスに使用されます。

  • ECS インスタンスの /test/mongo/data1 および /test/mongo/data2 ディレクトリは、レプリカセットノード内の自己管理型 MongoDB データベースに使用されます。

ステップ1:環境変数の設定

セルフマネージド MongoDB データベースの環境変数を設定します。 これにより、コマンドを実行するときに実行可能ファイルのパスを入力する必要がなくなります。 この手順を実行する前に、MongoDB がインストールされていることを確認してください。 詳細については、「MongoDBのインストール」をご参照ください。

MongoDB の環境変数が設定されている場合は、このステップをスキップしてステップ2の操作を実行してください。 詳細については、「ステップ2:物理バックアップファイルのダウンロードと解凍」をご参照ください。

  1. Linux で profile ファイルを開くには、次のコマンドを実行します:

    sudo vi /etc/profile
  2. i キーを押して編集モードに入ります。次に、最終行に次のコードを入力します:

    export PATH=$PATH:/<MongoDB サーバーのパス>/bin
    説明

    この例では、MongoDB サーバーのパスとして /test/mongo/bin を使用します。 環境変数を設定するときは、実際のパスを使用してください。

    例:

    export PATH=$PATH:/test/mongo/bin

  3. 「Esc」 キーを押して編集モードを終了し、:wq と入力してファイルを保存して終了します。

  4. 次のコマンドを実行して、設定した環境変数を有効にします。

    source /etc/profile

ステップ2:物理バックアップファイルのダウンロードと解凍

  1. 次のコマンドを実行して、ApsaraDB for MongoDB コンソールでインスタンスの物理バックアップデータをダウンロードします。 詳細については、「レプリカセットインスタンスの物理バックアップデータのダウンロード」をご参照ください。

    wget -c '<データバックアップファイルの外部ダウンロードURL>' -O <ダウンロードしたデータバックアップファイルのカスタム名>.<ファイル名拡張子>
    説明

    ファイル名の拡張子が .tar.gz または _qp.xb であることを確認してください。

  2. 次のコマンドを実行して、/test/mongo/ ディレクトリに data という名前のディレクトリを作成します。次に、ダウンロードしたインスタンスの物理バックアップファイルを /test/mongo/data/ ディレクトリに移動します。

    mkdir -p /test/mongo/data && mv <物理バックアップファイルの名前.拡張子> /test/mongo/data
  3. 物理バックアップファイルを解凍します。

    • 物理バックアップファイル名に .tar.gz 拡張子 (例: hins20190412.tar.gz) が含まれている場合は、次のコマンドを実行してファイルを解凍します。

      cd /test/mongo/data/ && tar xzvf hins20190412.tar.gz 
    • 物理バックアップファイル名に _qp.xb 拡張子 (例: hins20190412_qp.xb) が含まれている場合は、次の操作を実行してファイルを解凍します。

      1. Percona XtraBackup と qpress ツールをインストールします。 詳細については、「Debian と Ubuntu への Percona XtraBackup のインストール」をご参照ください。

      2. 物理バックアップファイルを解凍します。 この例では、ファイル名は hins20190412_qp.xb です。

        # ファイルがあるディレクトリに移動します。
        cd /test/mongo/data/
        # パッケージを解凍します。
        cat hins20190412_qp.xb | xbstream -x -v
        # 物理バックアップファイルを解凍します。
        innobackupex --decompress --remove-original /test/mongo/data

ステップ3:スタンドアロンモードのセルフマネージド MongoDB データベースへのデータ復元

  1. 次のコマンドを実行して、/test/mongo ディレクトリに mongod.conf という名前の設定ファイルを作成します。

    touch /test/mongo/mongod.conf
  2. コマンドラインで vi /test/mongo/mongod.conf を実行して mongod.conf ファイルを開きます。次に、i キーを押して編集モードに入ります。

    インスタンスのストレージエンジンに基づいて設定テンプレートを選択し、選択した設定テンプレートを mongod.conf 設定ファイルにコピーできます。

    説明

    このファイルでは、スタンドアロンでの起動と承認を有効にします。

    • WiredTiger

      systemLog:
          destination: file
          path: /test/mongo/mongod.log
          logAppend: true
      security:
          authorization: enabled
      storage:
          dbPath: /test/mongo/data
          directoryPerDB: true
      net:
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
      説明

      デフォルトでは、ApsaraDB for MongoDB は WiredTiger ストレージエンジンを使用し、directoryPerDB オプションが有効になっています。 したがって、上記の設定では directoryPerDB オプションは true に設定されています。

    • RocksDB

      systemLog:
          destination: file
          path: /test/mongo/logs/mongod.log
          logAppend: true
      security:
          authorization: enabled
      storage:
          dbPath: /test/mongo/data
              engine: rocksdb
      net:
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
  3. Esc キーを押して編集モードを抜け、:wq と入力してファイルを保存し終了します。

  4. mongod.conf 設定ファイルを使用して MongoDB を起動します。

    mongod -f /test/mongo/mongod.conf
  5. MongoDB を起動した後、次のコマンドを実行してセルフマネージド MongoDB データベースにログインし、mongo シェルに移動します。

    mongo --host 127.0.0.1 -u <ユーザー名> -p <パスワード> --authenticationDatabase admin
    • <ユーザー名>:セルフマネージド MongoDB データベースへのログインに使用するアカウント。 デフォルト値は root です。

    • <パスワード>:セルフマネージド MongoDB データベースへのログインに使用するパスワード。

      説明

      パスワードに特殊文字が含まれている場合は、パスワードを単一引用符 (') で囲む必要があります。 例:'test123!@#'。 そうしないと、データベースへのログインに失敗する可能性があります。

  6. mongo シェルで show dbs コマンドを実行して、MongoDB サーバー上の利用可能なすべてのデータベースを照会します。これにより、復元が成功したかどうかを確認できます。

  7. mongo シェルで exit コマンドを実行し、mongo シェルを終了します。

上記の手順を完了すると、スタンドアロンモードで MongoDB データベースを起動できます。 レプリカセットモードでデータベースを起動するには、ステップ4の操作を実行します。

ステップ4:レプリカセットモードでのセルフマネージド MongoDB データベースの起動

デフォルトでは、インスタンスの物理バックアップファイルには、そのレプリカセット設定が含まれています。 レプリカセットモードでセルフマネージド MongoDB データベースを起動するには、物理バックアップから設定を削除する必要があります。 レプリカセットモードでセルフマネージド MongoDB データベースを起動するには、次の操作を実行します。

  1. コマンドラインで、mongo シェルを使用してテストユーザーとしてデータベースにログインします。

    mongo --host 127.0.0.1 -u test -p <テストアカウントのパスワード> --authenticationDatabase admin
    説明

    パスワードに特殊文字が含まれている場合は、パスワードを単一引用符 (') で囲む必要があります。 例:'test123!@#'。 そうしないと、データベースへのログインに失敗する可能性があります。

  2. データベースにログインした後、サンプルコードのコマンドを実行して、次の操作を実行します。

    1. admin データベースに一時ユーザーを作成し、その一時ユーザーにローカルデータベースに対する読み取りおよび書き込み権限を付与します。

    2. 一時ユーザーに切り替え、ローカルデータベースの元のレプリカセット設定を削除します。

    3. テストユーザーに切り替え、一時ユーザーと一時権限を削除します。

      説明

      以下のコードの <Password of the test account> を、ご使用のテストアカウントのパスワードに置き換えます。

    use admin
    db.runCommand({
        createRole: "tmprole",
        roles: [
            {
                role: "test",
                db: "admin"
            }
        ],
        privileges: [
            {
                resource: {
                    db: 'local',
                    collection: 'system.replset'
                },
                actions: [
                    'remove'
                ]
            }
        ]
    })
    db.runCommand({
        createUser: "tmpuser",
        pwd: "tmppwd",
        roles: [
            'tmprole'
        ]
    })
    db.auth('tmpuser','tmppwd')
    use local
    db.system.replset.remove({})
    use admin
    db.auth('test','<テストアカウントのパスワード>')
    db.dropRole('tmprole')
    db.dropUser('tmpuser')
  3. 次のコマンドを実行して、MongoDB サービスをシャットダウンし、mongo シェルを終了します。

    use admin
    db.shutdownServer()
    exit
  4. レプリカセットに認証ファイルを作成します。

    レプリカセットモードでデータベースを起動するには、すべてのレプリカセットノードが相互に認証するためのキーファイルを作成する必要があります。

    1. 次のコマンドを実行して、mongo ディレクトリに keyFile フォルダーを認証ファイルディレクトリとして作成し、認証ファイルディレクトリにキーファイルを作成します。

      mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.key
    2. vi /test/mongo/keyFile/mongodb.key コマンドを実行して mongodb.key ファイルを開きます。 次に、i キーを押して編集モードに入ります。 例:

      MongoDB Encrypting File
      説明

      データを暗号化するために使用されるキーには、次の制限があります。

      • キーの長さは 6〜1,024 文字である必要があります。

      • キーには Base64 でエンコードされた文字のみを含めることができます。

      • キーに等号 (=) を含めることはできません。

    3. Esc キーを押して編集モードを終了し、 :wq と入力すると、ファイルが保存されて終了します。

    4. コマンドラインで、次のコマンドを実行して、認証ファイルの権限を400 に変更します。これにより、ファイルの所有者のみがファイルの内容を閲覧できるようになります。

      sudo chmod 600 /test/mongo/keyFile/mongodb.key
    説明

    この認証ファイルは、すべてのレプリカセットノードに適用されます。

  5. 次の操作を実行して、レプリカセット用に2つの空のノードを準備します。

    1. 次のコマンドを実行して、mongod.conf ファイルのコピーを2つ作成します。 この2つのコピーは、他の2つのノードの設定ファイルとして使用されます。

      cp /test/mongo/mongod.conf /test/mongo/mongod1.conf && cp /test/mongo/mongod.conf /test/mongo/mongod2.conf
    2. 次のコマンドを実行して、他の2つのノードのデータディレクトリを作成します。

      mkdir -p /test/mongo/data1 && mkdir -p /test/mongo/data2
  6. 次の操作を実行して、各ノードの設定ファイルを変更します。

    • vi /test/mongo/mongod.conf コマンドを実行してノード 1 の設定ファイルを開き、次の内容に基づいてファイルを変更します。その後、設定ファイルを保存して終了します。

      systemLog:
          destination: file
          path: /test/mongo/mongod.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
      replication:
          replSetName: "rs0"
    • vi /test/mongo/mongod1.conf コマンドを実行してノード 2 の設定ファイルを開き、次の内容に基づいてファイルを変更します。その後、設定ファイルを保存して終了します。

      systemLog:
          destination: file
          path: /test/mongo/mongod1.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data1
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27018
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod1.pid
      replication:
          replSetName: "rs0"
    • vi /test/mongo/mongod2.conf コマンドを実行してノード 3 の設定ファイルを開き、次の内容に基づいてファイルを変更します。その後、設定ファイルを保存して終了します。

      systemLog:
          destination: file
          path: /test/mongo/mongod2.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data2
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27019
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod2.pid
      replication:
          replSetName: "rs0"

    設定ファイルで次のパラメーターを変更できます。

    • systemLog.pathpath:現在のノードに MongoDB ログファイルを保存するパス。

    • dbpath:現在のノードに MongoDB データファイルを保存するパス。

    • pidFilePath:現在のノードに MongoDB プロセス ID (PID) ファイルを保存するパス。

    • keyFile:レプリカセットの認証ファイルを保存するパス。 レプリカセット内のすべてのノードは、同じ認証ファイルを使用する必要があります。

    • bindIp:現在のノードの IP アドレス。 レプリカセット内のすべてのノードが同じサーバーにデプロイされている場合は、同じ IP アドレスを使用できます。

    • port:現在のノードのポート番号。 レプリカセット内のすべてのノードが同じサーバーにデプロイされている場合は、異なるポート番号を使用する必要があります。

    • replication:レプリカセットの設定。

    • replSetName:レプリカセットの名前。

  7. 次のコマンドを実行して、3つのノードを起動します。

    mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.conf
  8. 3つのノードを起動した後、テストアカウントを使用してセルフマネージド MongoDB データベースにログインします。

    mongo --host 127.0.0.1 -u test -p <テストアカウントのパスワード> --authenticationDatabase admin
    説明

    パスワードに特殊文字が含まれている場合は、パスワードを単一引用符 (') で囲む必要があります。 例:'test123!@#'。 そうしないと、データベースへのログインに失敗する可能性があります。

  9. mongo シェルで、次のコマンドを実行して、前の操作で作成したノードをレプリカセットに追加し、レプリカセットを初期化します。

    rs.initiate( {
       _id : "rs0",
       version : 1,
       members: [
          { _id: 0, host: "127.0.0.1:27017" , priority : 1},
          { _id: 1, host: "127.0.0.1:27018" , priority : 0},
          { _id: 2, host: "127.0.0.1:27019" , priority : 0}
       ]
    })

    初期化が成功すると、次の出力が返されます。

    > rs.initiate( {
    ...    _id : "rs0",
    ...    version : 1,
    ...    members: [
    ...       { _id: 0, host: "127.0.0.1:27017" , priority : 1},
    ...       { _id: 1, host: "127.0.0.1:27018" , priority : 0},
    ...       { _id: 2, host: "127.0.0.1:27019" , priority : 0}
    ...    ]
    ... })
    { "ok" : 1 }
    rs0:SECONDARY>
    説明

    この手順では、rs.initiate() コマンドを使用します。コマンドの詳細については、rs.initiate() をご参照ください。

    コマンドが実行されると、追加された2つのノードとプライマリノードの間でデータが同期されます。 このプロセスで消費される時間は、バックアップファイルのサイズによって異なります。 データが同期されると、セルフマネージド MongoDB データベースはレプリカセットモードで起動します。

  10. 次の操作を実行して、レプリカセットモードのセルフマネージド MongoDB データベースが起動しているかどうかを確認します。

    1. exit コマンドを実行して mongo シェルを終了します。

    2. 次のコマンドを実行して、セルフマネージド MongoDB データベースに再度ログインします。

      mongo -u <ユーザー名> -p <パスワード> --authenticationDatabase admin
      • <ユーザー名>:セルフマネージド MongoDB データベースへのログインに使用するアカウント。 デフォルト値は root です。

      • <パスワード>:セルフマネージド MongoDB データベースへのログインに使用するパスワード。

        説明

        パスワードに特殊文字が含まれている場合は、パスワードを単一引用符 (') で囲む必要があります。 例:'test123!@#'。 そうしないと、データベースへのログインに失敗する可能性があります。

    3. 自己管理型の MongoDB データベースがレプリカセットモードで起動されているかどうかを確認してください。mongo シェルで、コマンドラインの左側に <Name of the replica set>:PRIMARY> が表示されている場合、自己管理型の MongoDB データベースはレプリカセットモードで起動されています。

よくある質問

指定の mongod.conf 設定ファイルを使用して自己管理型の MongoDB データベースを起動すると、なぜエラーが発生するのですか。

一般的な原因は次のとおりです。

  • mongod.conf 設定ファイルを指定する前に、自己管理型 MongoDB データベースを起動した可能性があります。その結果、データディレクトリに storage.bson ファイルが自動的に生成されます。この場合、storage.bson ファイルを削除してから、mongod.conf 設定ファイルを指定して自己管理型 MongoDB データベースを起動してください。

  • 現在のシステムで、別の mongod プロセスが実行されている可能性があります。 この場合は、ps -e | grep mongod コマンドを実行して PID を確認し、kill <PID> コマンドを実行してプロセスを停止します。 次に、mongod.conf 設定ファイルを指定して自己管理型 MongoDB データベースを起動します。

  • mongod.conf 設定ファイルで、無効な systemLog.path ログパスが指定されている場合があります。この場合、指定されたパスが存在するか、ログファイルに指定された名前が付いているかを確認してください。例: path: /<ログファイルのパス>/<ログファイル名>.log

レプリカセットモードで自己管理の MongoDB データベースを起動するために mongod.conf 設定ファイルを使用すると、なぜエラーが発生するのですか?

指定された keyFile 認証ファイルの権限を 600 に変更できない場合があります。 コマンドラインで、sudo chmod 600 <Path of keyFile> コマンドを実行して権限を変更します。

レプリカセットモードでセルフマネージド MongoDB データベースを起動した後、システムパフォーマンスが低下するのはなぜですか?

レプリカセットモードでセルフマネージド MongoDB データベースを起動すると、システムはプライマリノードのデータを他のノードに自動的に同期し始めます。 このプロセスは、システムパフォーマンスに影響を与える可能性があります。 データが同期されると、システムパフォーマンスは正常に戻ります。