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

ApsaraDB for MongoDB:物理バックアップを使用して、インスタンスデータを自己管理型MongoDBデータベースに復元する

最終更新日:Jan 06, 2025

このトピックでは、物理バックアップファイルを使用して、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

3月26日より前に作成されたApsaraDB for MongoDBインスタンスでは、2019に物理バックアップファイルがあります。tar形式。

xbstream

_qp.xb

3月26日以降に作成されたApsaraDB for MongoDBインスタンスは、2019に物理バックアップファイルがあります。xbstream形式。

説明

. xbstream形式はLinuxでのみ使用できます。 . のファイルを解凍するために使用されるPercona XtraBackupツールをWindowsがサポートしていないため、xbstream形式はWindowsでは使用できません。xbstream形式。

環境

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

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

  • 環境変数は、ECSインスタンス上の自己管理型MongoDBデータベースに対して設定されます。 コマンドを実行するときに、実行可能ファイルパスを再度入力する必要はありません。 詳細については、「手順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:/<The path of the MongoDB server>/bin
    説明

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

    例:

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

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

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

    source /etc/profile

ステップ2: 物理バックアップファイルをダウンロードして解凍する

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

    wget -c '<External download URL of the data backup file>' -O <Custom name of the downloaded data backup file>.<File name extension>
    説明

    ファイル名の拡張子が. tar.gzまたは_qp.xb.

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

    mkdir -p /test/mongo/data && mv <Name of the physical backup file.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ツールをインストールします。 詳細については、「DebianおよびUbuntuへのPercona XtraBackupのインストール」をご参照ください。

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

        # Go to the directory where the file is located. 
        cd /test/mongo/data/
        # Decompress the package. 
        cat hins20190412_qp.xb | xbstream -x -v
        # Decompress the physical backup file. 
        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 <username> -p <password> --authenticationDatabase admin
    • <username>: 自己管理型MongoDBデータベースへのログインに使用されるアカウント。 デフォルト値:root。

    • <password>: 自己管理型MongoDBデータベースへのログインに使用されるパスワード。

      説明

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

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

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

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

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

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

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

    mongo --host 127.0.0.1 -u test -p <Password of the test account> --authenticationDatabase admin
    説明

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

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

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

    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','<Password of the test account>')
    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-encoded文字のみを含めることができます。

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

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

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

      sudo chmod 400 /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 <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() コマンドを使用します。 コマンドの詳細については、rs.initiate() をご参照ください。

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

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

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

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

      mongo -u <username> -p <password> --authenticationDatabase admin
      • <username>: 自己管理型MongoDBデータベースへのログインに使用されるアカウント。 デフォルト値:root。

      • <password>: 自己管理型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データベースを起動します。

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

mongod.conf構成ファイルを使用して自己管理型MongoDBデータベースをレプリカセットモードで起動すると、エラーが発生するのはなぜですか。

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

自己管理型MongoDBデータベースをレプリカセットモードで起動すると、システムのパフォーマンスが低下するのはなぜですか。

自己管理型MongoDBデータベースをレプリカセットモードで起動すると、プライマリノードのデータの他のノードへの同期が自動的に開始されます。 このプロセスは、システム性能に影響を及ぼし得る。 データが同期された後、システムのパフォーマンスは正常に戻ります。