このトピックでは、物理バックアップを使用して、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: 物理バックアップファイルのダウンロードと解凍を実行します。
次のコマンドを実行して、Linuxで
profile
ファイルを開きます。sudo vi /etc/profile
I
キーを押して編集モードに入ります。 次に、最後の行に次のコードを入力します。export PATH=$PATH:/<The path of the MongoDB server>/bin
例:
export PATH=$PATH:/test/mongo/bin
説明この例では、/test/mongo/binをMongoDBサーバーのパスとして使用します。 環境変数を設定するときは、実際のパスを使用します。
Escキーを押して編集モードを終了し、
:wq
と入力してファイルを保存して終了します。次のコマンドを実行して、設定された環境変数を有効にします。
source /etc/profile
ステップ2: 物理バックアップファイルをダウンロードして解凍する
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
.次のコマンドを実行して、/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
物理バックアップファイルを解凍します。
物理バックアップファイルに. tar.gzなどの拡張子hins20190412.tar.gz、次のコマンドを実行してファイルを解凍します。
cd /test/mongo/data/ && tar xzvf hins20190412.tar.gz
物理バックアップファイルの拡張子が _qp.xb (hins20190412_qp.xbなど) の場合、次の操作を実行してファイルを解凍します。
Percona XtraBackupおよびqpressツールをインストールします。 詳細については、「DebianおよびUbuntuへのPercona XtraBackupのインストール」をご参照ください。
物理バックアップファイルを解凍します。 この例では、ファイルは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データベースにデータを復元する
次のコマンドを実行して、/test/mongoディレクトリにmongod.confという名前の構成ファイルを作成します。
touch /test/mongo/mongod.conf
コマンドラインで、
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
Escキーを押して編集モードを終了し、
:wq
と入力してファイルを保存して終了します。mongod.conf設定ファイルを使用してMongoDBを起動します。
mongod -f /test/mongo/mongod.conf
MongoDBを起動した後、次のコマンドを実行して自己管理MongoDBデータベースにログインし、mongoシェルに移動します。
mongo -- host 127.0.0.1 -u <username> -p <password> -- authenticationDatabase admin
注:
<username>: 自己管理型MongoDBデータベースへのログインに使用されるアカウント。 デフォルト値:root。
<password>: 自己管理型MongoDBデータベースへのログインに使用されるパスワード。
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
mongoシェルで
show dbs
コマンドを実行して、MongoDBサーバーで使用可能なすべてのデータベースを照会します。 この方法で、復元が成功したかどうかを確認できます。mongoシェルでexitコマンドを実行し、mongoシェルを
終了
します。
ステップ4: レプリカセットモードで自己管理型MongoDBデータベースを起動する
デフォルトでは、ApsaraDB for MongoDBインスタンスの物理バックアップファイルにレプリカセット設定が含まれています。 MongoDBはスタンドアロンモードで起動する必要があります。 そうしないと、自己管理MongoDBデータベースにアクセスできなくなる可能性があります。
MongoDBをレプリカセットモードで起動する場合は、次の操作を実行する前に、スタンドアロンモードで自己管理型MongoDBデータベースにデータを復元する必要があります。
コマンドラインで、mongoシェルを使用してテストユーザーとしてデータベースにログインします。
mongo --host 127.0.0.1 -u test -p <Password of the test account> --authenticationDatabase admin
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
データベースにログインした後、サンプルコードのコマンドを実行して、次の操作を実行します。
管理者データベースに一時ユーザーを作成し、その一時ユーザーにローカルデータベースに対する読み取りおよび書き込み権限を付与します。
一時ユーザーに切り替えて、ローカルデータベースの元のレプリカセット構成を削除します。
テストユーザーに切り替えて、一時ユーザーと一時的な権限を削除します。
説明次のコードの
<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')
次のコマンドを実行してMongoDBサービスをシャットダウンし、mongoシェルを終了します。
管理者を使用する
use admin db.shutdownServer() 終了
レプリカセットに認証ファイルを作成します。
MongoDBをレプリカセットモードで起動するには、すべてのレプリカセットノードが相互に認証するためのキーファイルを作成する必要があります。
次のコマンドを実行して、mongoディレクトリに認証ファイルディレクトリとしてkeyFileフォルダを作成し、認証ファイルディレクトリにキーファイルを作成します。
mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.key
vi /test/mongo/keyFile/mongodb.key
コマンドを実行し、mongodb.keyファイルを開きます。I
キーを押して編集モードに入ります。 例:MongoDB Encrypting File
説明データの暗号化に使用されるキーには、次の制限があります。
キーの長さは6 ~ 1,024文字である必要があります。
キーにはBase64-encoded文字のみを含めることができます。
キーに等号 (=) を含めることはできません。
Escキーを押して編集モードを終了し、
:wq
と入力してファイルを保存して終了します。コマンドラインで、次のコマンドを実行して、認証ファイルの権限を
400
に変更します。 このようにして、ファイルの所有者だけがファイルの内容を見ることができる。sudo chmod 400 /test/mongo/keyFile/mongodb.key
説明この認証ファイルは、すべてのレプリカセットノードに適用されます。
次の操作を実行して、レプリカセットに2つの空のノードを準備します。
次のコマンドを実行して、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つのノードのデータディレクトリを作成します。
mkdir -p /test/mongo/data1&mkdir -p /test/mongo/data2
次の操作を実行して、各ノードの設定ファイルを変更します。
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ログファイルを格納するためのパス。
dbpath: 現在のノードにMongoDBデータファイルを格納するパス。
pidFilePath: 現在のノードにMongoDBプロセスID (PID) ファイルを格納するパス。
keyFile: レプリカセットの認証ファイルを格納するパス。 レプリカセット内のすべてのノードは、同じ認証ファイルを使用する必要があります。
bindIp: 現在のノードのIPアドレス。 レプリカセット内のすべてのノードが同じサーバーにデプロイされている場合、同じIPアドレスを使用できます。
port: 現在のノードのポート番号。 レプリカセット内のすべてのノードが同じサーバーにデプロイされている場合、異なるポート番号を使用する必要があります。
replication: レプリカセットの構成。
replSetName: レプリカセットの名前。
次のコマンドを実行して、3つのノードを起動します。
mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.conf
3つのノードを起動したら、テストアカウントを使用して自己管理型MongoDBデータベースにログインします。
mongo --host 127.0.0.1 -u test -p <Password of the test account> --authenticationDatabase admin
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
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データベースはレプリカセットモードで起動されます。
次の操作を実行して、レプリカセットモードの自己管理MongoDBデータベースが起動しているかどうかを確認します。
exit
コマンドを実行し、mongoシェルを終了します。次のコマンドを実行して、自己管理型MongoDBデータベースに再度ログインします。
mongo -u <username> -p <password> -- authenticationDatabase admin
注:
<username>: 自己管理型MongoDBデータベースへのログインに使用されるアカウント。 デフォルト値:root。
<password>: 自己管理型MongoDBデータベースへのログインに使用されるパスワード。
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
自己管理型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をレプリカセットモードで起動すると、プライマリノードのデータの他のノードへの同期が自動的に開始されます。 このプロセスは、システム性能に影響を及ぼし得る。 データが同期された後、システムのパフォーマンスは正常に戻ります。