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

ApsaraDB for MongoDB:ローカルディスクバックアップから自己管理データベースへの復元

最終更新日:Jun 23, 2026

このトピックでは、ローカルディスクを使用する ApsaraDB for MongoDB インスタンスからバックアップをダウンロードし、自己管理のスタンドアロンまたはレプリカセットの MongoDB データベースに復元する方法について説明します。

論理バックアップの復元

注意事項

  • MongoDB は継続的に更新されるため、古いバージョンの mongorestore は新しいバージョンの MongoDB と互換性がありません。互換性のある mongorestore のバージョンの選択については、mongorestore をご参照ください。

  • 自己管理データベースがシャードクラスターの場合、<hostname> パラメーターを自己管理データベースの mongos コンポーネントのアドレスに設定する必要があります。

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

  • シャードクラスターインスタンスから自己管理データベースにデータを復元する場合、クラスターインスタンスの各シャードのバックアップデータをダウンロードし、自己管理データベースにインポートする必要があります。シャードクラスターインスタンスに孤立ドキュメントが含まれている場合、自己管理データベースでダーティデータが発生する可能性があります。

前提条件

  • 自己管理 MongoDB データベースが配置されているクライアントに、ApsaraDB for MongoDB インスタンスのデータベースバージョンと同じバージョンの MongoDB をダウンロードしてインストールします。クライアントはローカルサーバーまたは ECS インスタンスにすることができます。インストール手順については、Install MongoDB をご参照ください。

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

操作手順

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

  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 データベースにログインするためのユーザー名。ユーザーがすべてのデータベースに対する権限を持っていることを確認してください。ルートアカウントの使用を推奨します。

    • <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 ツールをサポートしていないため、Linux システムでのみ解凍できます。

環境

  • この例で使用するサーバーは、Ubuntu 16.04 (64 ビット) イメージを実行する Alibaba Cloud ECS インスタンスです。ECS インスタンスの作成方法の詳細については、ウィザードを使用した ECS インスタンスの作成をご参照ください。

  • 対応するバージョンの MongoDB が ECS インスタンスにインストールされています。インストール手順については、MongoDB の公式ドキュメントをご参照ください。

  • MongoDB の環境変数が ECS インスタンスに 設定されています。コマンド実行時に実行可能ファイルの完全なパスを入力する必要はありません。

  • /test/mongo/data ディレクトリは、物理的な復元のためのデータベースディレクトリとして機能します。

  • /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_mongodb_server>/bin
    説明

    この例では、MongoDB サーバーのパスは /test/mongo/bin です。これを実際のパスに置き換えてください。

    例:

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

  3. Esc キーを押し、:wq と入力して Enter キーを押し、保存して終了します。

  4. 次のコマンドを実行して変更を適用します。

    source /etc/profile

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

  1. MongoDB の物理バックアップファイルをダウンロードします

    wget -c '<public_download_URL_of_backup_file>' -O <custom_filename>.<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 を一重引用符 (') で囲んで、正しく解析されるようにしてください。

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

    mkdir -p /test/mongo/data && mv <physical_backup_filename.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 の公式ウェブサイトのインストール手順をご参照ください。

      2. 物理バックアップファイルを解凍します。

        # ファイルが配置されているディレクトリに移動します。
        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 と入力して Enter キーを押し、保存して終了します。

  4. 新しい mongod.conf 設定ファイルで MongoDB を起動します。

    mongod -f /test/mongo/mongod.conf
  5. 起動が完了したら、次のコマンドを実行して MongoDB データベースにログインします。

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

    • <password>:データベースユーザーのパスワード。

      説明

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

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

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

これらの手順を完了すると、MongoDB データベースをスタンドアロンモードで起動できます。データベースをレプリカセットモードで起動するには、ステップ 4 をご参照ください。

ステップ 4:レプリカセットモードでの起動

デフォルトでは、ApsaraDB for MongoDB からの物理バックアップには、元のインスタンスのレプリカセット構成が含まれています。データベースをレプリカセットモードで起動するには、まずこの構成を削除する必要があります。次の手順に従ってください。

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

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

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

  2. ログイン後、以下のコードブロックのコマンドを実行して、次の操作を実行します。

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

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

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

      説明

      次のコードを実行する前に、<test_user_password> プレースホルダーを実際の 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','<test_user_password>')
    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 を実行してキーファイルを開きます。i を押して挿入モードに入り、キーの内容を入力します。例:

      MongoDB Encrypting File
      説明

      キーファイルの内容には次の制限があります。

      • 長さは 6〜1024 文字である必要があります。

      • base64 文字セットの文字のみを含めることができます。

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

    3. Esc キーを押し、:wq と入力して Enter キーを押し、保存して終了します。

    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.path / path:現在のノードの MongoDB ログファイルへのパス。

    • storage.dbPath:現在のノードの MongoDB データファイルへのパス。

    • processManagement.pidFilePath:現在のノードの MongoDB プロセスの PID ファイル (プロセス ID を格納) へのパス。

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

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

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

    • replication:レプリカセットの構成。

    • 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 <test_account_password> --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() コマンドを使用します。詳細な使用方法については、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 を実行してプロセス ID (PID) を見つけ、kill <PID> を実行してプロセスを停止します。その後、mongod.conf ファイルを使用してデータベースを再起動してください。

  • mongod.conf ファイルの systemLog.path に指定されたパスが間違っている可能性があります。指定されたパスが存在し、ログファイル名を指定していることを確認してください。例:path: /<path_to_log_file>/<log_filename>.log

mongod.conf を使用してレプリカセットを起動するとエラーが発生するのはなぜですか?

指定した keyFile の権限を 600 に設定していない可能性があります。sudo chmod 600 <path_to_keyFile> コマンドを実行して権限を変更し、再試行してください。

レプリカセットを起動した後にシステムが遅いのはなぜですか?

起動後、システムはプライマリノードからセカンダリノードへのデータ同期を自動的に開始します。データ同期が完了すると、システムのパフォーマンスは通常に戻ります。

ご利用のインスタンスタイプがバックアップファイルのダウンロードをサポートしていない場合、自己管理データベースにデータを復元するにはどうすればよいですか?