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

ApsaraDB for MongoDB:ダウンロードしたローカルディスクバックアップから自己管理データベースにデータを復元する

最終更新日:Nov 09, 2025

このトピックでは、ローカルディスクを使用する MongoDB インスタンスのダウンロード済みバックアップから、シングルノードまたはレプリカセットとして構成された自主管理 MongoDB データベースにデータを復元する方法について説明します。

ローカルディスクの論理バックアップからデータを復元する

注意事項

  • MongoDB は常に更新されており、古いバージョンの mongorestore は新しいバージョンの MongoDB と互換性がない場合があります。MongoDB のバージョンと互換性のある mongorestore のバージョンを選択する必要があります。詳細については、「mongorestore」をご参照ください。

  • 自主管理データベースがシャードクラスターの場合、データインポートコマンドの <hostname> パラメーターを、自主管理データベースの Mongos コンポーネントのアドレスに設定します。

  • 自主管理データベースがシャードクラスターの場合、データインポートコマンドに --nsExclude="config.*" を追加する必要があります。そうしないと、データ復元中にエラーが発生する可能性があります。

  • シャードクラスターインスタンスから自主管理データベースにデータを復元する場合、各シャードコンポーネントのバックアップデータをダウンロードし、そのデータを自主管理データベースにインポートする必要があります。シャードクラスターインスタンスに孤立したドキュメントが含まれている場合、ダーティデータが自主管理データベースに導入される可能性があります。複数のシャードのバックアップを同じシャードクラスターに復元する場合、最初のシャードのバックアップを復元するときにのみ drop パラメーターを使用します。

準備

  • ソース ApsaraDB for MongoDB インスタンスと同じバージョンの MongoDB をクライアント (ローカルサーバーまたは ECS インスタンス) にダウンロードしてインストールします。詳細については、「MongoDB のインストール」をご参照ください。

  • 論理バックアップファイルをダウンロード済みであること。まだダウンロードしていない場合は、「バックアップファイルのダウンロード」をご参照ください。

手順

  1. ダウンロードしたバックアップファイルを、自主管理 MongoDB データベースがあるクライアントにコピーします。このクライアントには mongorestore ツールがインストールされている必要があります。

  2. 次のコマンドを実行して、バックアップファイルから自主管理 MongoDB データベースにデータをインポートします。

    mongorestore -h <hostname> --port <server port> -u <username> -p <password> --drop --gzip --archive=<backupfile> -vvvv --stopOnError

    次のパラメーターを変更します:

    • <hostname>: 自主管理 MongoDB データベースのサーバーアドレス。ローカルサーバーの場合は、127.0.0.1 と入力できます。

      自主管理データベースがシャードクラスターの場合、このパラメーターを自主管理データベースの Mongos コンポーネントのアドレスに設定します。

    • <server port>: 自主管理 MongoDB データベースのポート。

    • <username>: 自主管理 MongoDB データベースへのログインに使用するユーザー名。ユーザーがすべてのデータベースに対する権限を持っていることを確認してください。root アカウントを使用することをお勧めします。

    • <password>: データベースアカウントのパスワード。

    • <backupfile>: ダウンロードした論理バックアップファイルの名前。

    次のパラメーターは変更する必要はありません:

    • --drop: バックアップファイルを復元する前にコレクションを削除します。

      説明

      複数のシャードのバックアップを同じシャードクラスターに復元する場合、最初のシャードのバックアップを復元するときにのみこのパラメーターを使用します。

    • --gzip: バックアップファイル内のデータが gzip 形式で圧縮されており、解凍する必要があることを指定します。

      説明

      このパラメーターは MongoDB 3.1.4 以降でサポートされています。詳細については、「mongo-tools」をご参照ください。

    • -vvvv: 出力の詳細レベル。'v' の文字が多いほど、出力は詳細になります。

    • --stopOnError: エラーが発生した場合にインポートプロセスを停止します。

    • --nsExclude: 一致するコレクションを復元から除外します。例: --nsExclude="config.*"

    例:

    mongorestore -h 127.0.0.1 --port 27017 -u root -p ******** --drop --gzip --archive=hins1111_data_20190710.ar -vvvv --stopOnError

ローカルディスクの物理バックアップからデータを復元する

前提条件

  • インスタンスがレプリカセットインスタンスであること。

  • インスタンスで TDE 機能が無効になっていること。

  • インスタンスのストレージエンジンが WiredTiger または RocksDB であること。インスタンスのストレージエンジンが TerarkDB の場合は、「ディスクバックアップからデータを復元する」をご参照ください。

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

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

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

ApsaraDB for MongoDB インスタンスのバージョンは、自主管理 MongoDB データベースのバージョンと互換性がある必要があります。次の表にバージョンのマッピングを示します。

MongoDB インスタンス

自主管理 MongoDB データベース

バージョン 3.2

バージョン 3.2 または 3.4

バージョン 3.4

バージョン 3.4

バージョン 4.0

バージョン 4.0

バージョン 4.2

バージョン 4.2

物理バックアップファイルの形式

物理バックアップファイルの形式

ファイル拡張子

説明

tar 形式

.tar.gz

2019 年 3 月 26 日より前に作成されたインスタンスの場合、物理バックアップファイルは tar 形式です。

xbstream 形式

_qp.xb

2019 年 3 月 26 日以降に作成されたインスタンスの場合、物理バックアップファイルは xbstream 形式です。

説明

Windows はこのファイルの解凍に必要な percona-xtrabackup ツールをサポートしていないため、xbstream 形式は Linux でのみ解凍できます。

環境

  • 次の手順では、64 ビットの Ubuntu 16.04 イメージを実行する Alibaba Cloud ECS インスタンスを使用します。ECS インスタンスの作成方法の詳細については、「ECS インスタンスの作成」をご参照ください。

  • 必要なバージョンの MongoDB が ECS インスタンスにインストールされていること。詳細については、MongoDB の公式ドキュメントをご参照ください。

  • MongoDB の環境変数が ECS インスタンスに設定されていること。これにより、実行可能ファイルの完全なパスを入力せずにコマンドを実行できます。

  • /test/mongo/data ディレクトリが MongoDB の物理復元用のデータベースディレクトリとして使用されます。

  • /test/mongo/data1 および /test/mongo/data2 ディレクトリがレプリカセットノードのデータベースディレクトリとして使用されます。

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

自主管理データベース環境で MongoDB の環境変数を設定します。これにより、完全なパスを入力せずにコマンドを実行できます。このステップを実行する前に、MongoDB がインストールされていることを確認してください。

MongoDB の環境変数をすでに設定している場合は、このステップをスキップして「ステップ 2: 物理バックアップファイルのダウンロードと解凍」に進むことができます。

  1. 次のコマンドを実行して、Linux の profile 環境変数ファイルを開きます。

    sudo vi /etc/profile
  2. i キーを押して編集モードに入ります。次に、最後の行に次の内容を追加します:

    export PATH=$PATH:/<Path to the MongoDB server>/bin
    説明

    この例では、MongoDB サーバーへのパスは /test/mongo/bin です。要件に応じてパスを変更できます。

    例:

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

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

  4. 次のコマンドを実行して、環境変数ファイルへの変更を適用します:

    source /etc/profile

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

  1. MongoDB インスタンスの物理バックアップファイルをダウンロードします。次のコマンドを実行してファイルをダウンロードできます。

    wget -c '<External download URL of the data backup file>' -O <Custom_file_name>.<Extension>

    例:

    wget -c 'http://rdsbak-hz-v3.oss-cn-hangzhou-internal.aliyuncs.com/custins5475****/hins1907****_data_20210906103710_qp.xb?Expires=......' -O backupfile._qp.xb
    説明
    • ダウンロードしたファイルの種類に基づいて、ファイル拡張子が .tar.gz または _qp.xb であることを確認してください。

    • URL が正しく解析されるように、ダウンロード URL を一重引用符 (') で囲みます。

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

    mkdir -p /test/mongo/data && mv <Physical_backup_file_name.Extension> /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 パッケージをインストールします。詳細については、Percona XtraBackup の公式 Web サイトの「インストール手順」をご参照ください。

      2. 物理バックアップファイルを解凍します。たとえば、データベースバックアップファイルの名前が hins20190412_qp.xb の場合:

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

ステップ 3: シングルノードモードで物理バックアップからデータを復元する

  1. 次のコマンドを実行して、/test/mongo フォルダに mongod.conf という名前の構成ファイルを作成します。

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

    ApsaraDB for MongoDB インスタンスのストレージエンジンに基づいて起動構成テンプレートを選択し、それを 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 オプションを有効にします。したがって、このオプションは構成で指定されます。

    • 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 データベースにログインし、mongo シェルに入ります。

    mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin
    • <username>: MongoDB インスタンスのデータベースアカウント。デフォルトは root です。

    • <password>: データベースアカウントのパスワード。

      説明

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

  6. mongo シェルで show dbs を実行して、ローカル MongoDB インスタンス内のすべてのデータベースをクエリし、復元が成功したことを確認します。

  7. これで復元は完了です。mongo シェルで exit コマンドを実行して終了できます。

これらのステップを完了すると、MongoDB データベースはシングルノードモードで起動します。データベースをレプリカセットモードで起動するには、ステップ 4 に進みます。

ステップ 4: レプリカセットモードで MongoDB データベースを起動する

デフォルトでは、ApsaraDB for MongoDB インスタンスの物理バックアップには、元のインスタンスのレプリカセット構成が含まれています。データベースをレプリカセットモードで起動するには、この構成を削除する必要があります。そのためには、次のステップを実行します:

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

    mongo --host 127.0.0.1 -u test -p <password_of_the_test_user> --authenticationDatabase admin
    説明

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

  2. ログイン後、次のコードブロックのコマンドを実行して、以下のアクションを実行します:

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

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

    3. test ユーザーに切り替えて、一時ユーザーとその権限を削除します。

      説明

      コマンドを実行する前に、次のコードの <password_of_the_test_user> を test ユーザーのパスワードに置き換えてください。

    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','<password_of_the_test_user>')
    db.dropRole('tmprole')
    db.dropUser('tmpuser')
  3. 次のコマンドを実行して MongoDB サービスをシャットダウンし、mongo シェルを終了します。

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

    MongoDB をレプリカセットモードで起動するには、レプリカセットノード間の認証用のキーファイルを作成する必要があります。

    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 400 /test/mongo/keyFile/mongodb.key
    説明

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

  5. レプリカセット用に 2 つの空のノードを準備します。

    1. 次のコマンドを実行して、mongod.conf ファイルを 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:
          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"

    以下に主要なパラメーターを説明します:

    • path (systemLog 配下): 現在のノードの MongoDB ログファイルのパス。

    • dbpath: 現在のノードの MongoDB データファイルのパス。

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

    • 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. 起動が完了したら、test アカウントを使用して MongoDB データベースにログインします。

    mongo --host 127.0.0.1 -u test -p <password_of_the_test_account> --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() コマンドを使用します。このコマンドの詳細については、MongoDB の公式ドキュメントの「rs.initiate()」をご参照ください。

    コマンドが正常に実行されると、2 つの新しいノードがプライマリノードとのデータ同期を開始します。このプロセスに必要な時間は、バックアップファイルのサイズによって異なります。データ同期が完了すると、レプリカセットモードでの起動は完了です。

  10. 起動が成功したことを確認します。

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

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

      mongo -u <username> -p <password> --authenticationDatabase admin
      • <username>: MongoDB インスタンスのデータベースアカウント。デフォルトは root です。

      • <password>: データベースアカウントのパスワード。

        説明

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

    3. mongo シェルのコマンドラインの左側を観察します。<Replica_set_name>:PRIMARY> が表示されている場合、レプリカセットモードでの起動は成功です。

よくある質問

指定された mongod.conf 構成ファイルを使用して自主管理データベースを起動するとエラーが発生するのはなぜですか?

一般的な理由は次のとおりです:

  • mongod.conf 構成ファイルを指定する前にデータベースを起動した可能性があります。これにより、storage.bson ファイルがデータディレクトリに自動的に生成されます。この問題を解決するには、このファイルを移動し、mongod.conf 構成ファイルを指定してデータベースを再起動します。

  • 現在のシステムで mongod プロセスがすでに実行されている可能性があります。ps -e | grep mongod コマンドを実行して mongod プロセス ID を見つけることができます。次に、kill <Process_ID> コマンドを実行して mongod プロセスを停止し、mongod.conf 構成ファイルを指定してデータベースを再起動します。

  • mongod.conf 構成ファイルで正しい systemLog.path ログパスを指定していない可能性があります。指定したパスが存在し、ログファイル名を指定していることを確認してください。例: path: /<Log_file_path>/<Log_file_name>.log

指定された mongod.conf 構成ファイルを使用してレプリカセットモードでデータベースを起動するとエラーが発生するのはなぜですか?

指定された keyFile 認証ファイルの権限を 600 に変更していない可能性があります。コマンドラインで sudo chmod 600 <Path_to_keyFile> を実行して権限を変更してから、再試行してください。

レプリカセットモードで MongoDB データベースを起動した後にシステムが遅くなるのはなぜですか?

起動が完了すると、システムは自動的にプライマリノードから他のノードへのデータ同期を開始します。データ同期が完了するまで待つ必要があります。

インスタンスアーキテクチャでバックアップファイルのダウンロードが許可されていない場合、インスタンスデータを自主管理データベースに復元するにはどうすればよいですか?