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

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

最終更新日:Jul 03, 2024

このトピックでは、物理バックアップを使用して、ApsaraDB for MongoDBインスタンスのデータを自己管理型MongoDBデータベースに復元する方法について説明します。 データの復元を開始する前に、ApsaraDB for MongoDBコンソールでApsaraDB for MongoDBインスタンスの物理バックアップデータをダウンロードする必要があります。

前提条件

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

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

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

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

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

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

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

ApsaraDB for MongoDBインスタンスのバージョンは、自己管理型MongoDBデータベースのバージョンに対応している必要があります。 次の表に、ApsaraDB for 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形式。

説明

上記の2つのファイル形式のパッケージを解凍するには、異なる方法を使用する必要があります。 詳細については、「手順2: 物理バックアップファイルのダウンロードと解凍」をご参照ください。

環境

次の手順では、Ubuntu 16.04 64ビットイメージから作成されたECSインスタンスを使用します。 詳細は、「ECS インスタンスの作成」をご参照ください。

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

  • 環境変数は、ECSインスタンス上の自己管理型MongoDBデータベースに対して設定されます。 コマンドを実行するときに、実行可能ファイルパスを再度入力する必要はありません。 詳細については、「環境変数の設定」をご参照ください。

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

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

  • このトピックで提供されているコマンドをECSインスタンスで実行する場合、最後のコマンドを入力した後にEnterキーを押す必要があります。

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

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

説明

MongoDB用に環境変数が設定されている場合は、この手順をスキップして手順2: 物理バックアップファイルのダウンロードと解凍を実行します。

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

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

    export PATH=$PATH:/<The path of the MongoDB server>/bin

    例:

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

    説明

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

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

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

    source /etc/profile

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

  1. ApsaraDB for MongoDBコンソールで、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という名前のディレクトリを作成します。 次に、ダウンロードしたApsaraDB for MongoDBインスタンスの物理バックアップファイルを /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キーを押して編集モードに入ります。

    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オプションが有効になっています。 したがって、上記の設定では、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シェルでexitコマンドを実行し、mongoシェルを終了します。

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

デフォルトでは、ApsaraDB for MongoDBインスタンスの物理バックアップファイルにレプリカセット設定が含まれています。 MongoDBはスタンドアロンモードで起動する必要があります。 そうしないと、自己管理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()
    終了 
  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-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/mongod.conf /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}
       ]
    })

    成功した初期化の例: Example of successful initialization

    説明

    このステップでは、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データベースを起動します。

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

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

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

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

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