このトピックでは、物理バックアップファイルを使用して、ApsaraDB for MongoDBインスタンスから自己管理型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形式。 |
環境
次の手順では、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: 物理バックアップファイルのダウンロードと解凍を実行します。
次のコマンドを実行して、Linuxで
profile
ファイルを開きます。sudo vi /etc/profile
I
キーを押して編集モードに入ります。 次に、最後の行に次のコードを入力します。export PATH=$PATH:/<MongoDBサーバーのパス>/bin
説明この例では、/test/mongo/binをMongoDBサーバーのパスとして使用します。 環境変数を設定するときは、実際のパスを使用します。
例:
エクスポートPATH=$PATH:/test/mongo/bin
Escキーを押して編集モードを終了し、
:wq
と入力してファイルを保存して終了します。次のコマンドを実行して、設定された環境変数を有効にします。
source /etc/profile
ステップ2: 物理バックアップファイルをダウンロードして解凍する
ApsaraDB for MongoDBコンソールで、ApsaraDB for MongoDBインスタンスの物理バックアップデータをダウンロードします。 詳細については、「レプリカセットインスタンスの物理バックアップデータのダウンロード」をご参照ください。 次のコマンドを実行してデータをダウンロードすることもできます。
wget -c '<データバックアップファイルの外部ダウンロードURL>' -O <ダウンロードしたデータバックアップファイルのカスタム名>.<ファイル名拡張子>
説明ファイルの拡張子が
. tar.gz
または_qp.xb
.次のコマンドを実行して、/test/mongo/ ディレクトリに
data
という名前のディレクトリを作成します。 次に、ダウンロードしたApsaraDB for MongoDBインスタンスの物理バックアップファイルを /test/mongo/data/ ディレクトリに移動します。mkdir -p /test/mongo/data&mv <物理バックアップファイルの名前。拡張子> /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です。
# ファイルがあるディレクトリに移動します。 cd /テスト /mongo /データ / # パッケージを解凍します。 cat hins20190412_qp.xb | xbstream -x -v # 物理バックアップファイルを解凍します。 innobackupex -- 解凍 -- 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 パス: /test/mongo/mongod.log logAppend: true セキュリティ: 承認: 有効 ストレージ: dbPath: /test/mongo/data directoryPerDB: true ネット: port: 27017 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /test/mongo/mongod.pid
説明デフォルトでは、ApsaraDB for MongoDBはWiredTigerストレージエンジンを使用し、directoryPerDBオプションが有効になっています。 したがって、上記の設定では、directoryPerDBオプションがtrueに設定されます。
RocksDB
systemLog: destination: file パス: /test/mongo/logs/mongod.log logAppend: true セキュリティ: 承認: 有効 ストレージ: dbPath: /test/mongo/data エンジン: rocksdb ネット: 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 <テストアカウントのパスワード>-authenticationDatabase admin
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
データベースにログインした後、サンプルコードのコマンドを実行して、次の操作を実行します。
管理者データベースに一時ユーザーを作成し、その一時ユーザーにローカルデータベースに対する読み取りおよび書き込み権限を付与します。
一時ユーザーに切り替えて、ローカルデータベースの元のレプリカセット構成を削除します。
テストユーザーに切り替えて、一時ユーザーと一時的な権限を削除します。
説明次のコードの
<Password of the test account>
をテストアカウントのパスワードに置き換えます。
use admin db.ru nCommand({ createRole: "tmprole" 、 roles: [ { role: "テスト" 、 db: "admin" } ], privileges: [ { リソース: { db: 'local' 、 コレクション: 'system.replset' }, アクション: [ 「削除」 ] } ] }) db.ru nCommand({ createUser: "tmpuser" 、 pwd: "tmppwd" 、 roles: [ 'tmprole' ] }) db.auth('tmpuser ','tmppwd') ローカルを使用 db.system.replset.remove({}) 管理者を使用 db.auth('test','<テストアカウントのパスワード>') 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暗号化ファイル
説明データの暗号化に使用されるキーには、次の制限があります。
キーの長さは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 パス: /test/mongo/mongod.log logAppend: true セキュリティ: authorization: enabled keyFile: /test/mongo/keyFile/mongodb.key ストレージ: dbPath: /test/mongo/data directoryPerDB: true ネット: bindIp: 127.0.0.1 port: 27017 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /test/mongo/mongod.pid レプリケーション: replSetName: "rs0"
vi /test/mongo/mongod1.conf
コマンドを実行し、ノード2の設定ファイルを開きます。 次の内容に基づいてファイルを変更します。 次に、構成ファイルを保存して終了します。systemLog: destination: file パス: /test/mongo/mongod1.log logAppend: true セキュリティ: authorization: enabled keyFile: /test/mongo/keyFile/mongodb.key ストレージ: dbPath: /test/mongo/data1 directoryPerDB: true ネット: bindIp: 127.0.0.1 ポート: 27018 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /test/mongo/mongod1.pid レプリケーション: replSetName: "rs0"
vi /test/mongo/mongod2.conf
コマンドを実行し、ノード3の設定ファイルを開きます。 次の内容に基づいてファイルを変更します。 次に、構成ファイルを保存して終了します。systemLog: destination: file パス: /test/mongo/mongod2.log logAppend: true セキュリティ: authorization: enabled keyFile: /test/mongo/keyFile/mongodb.key ストレージ: dbPath: /test/mongo/data2 directoryPerDB: true ネット: bindIp: 127.0.0.1 ポート: 27019 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /test/mongo/mongod2.pid レプリケーション: 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 <テストアカウントのパスワード>-authenticationDatabase admin
説明パスワードに特殊文字が含まれている場合は、パスワードを一重引用符 ('') で囲む必要があります。 例: 'test123!@#'それ以外の場合、データベースへのログインに失敗する可能性があります。
mongoシェルで、上記の操作で作成したノードをレプリカセットに追加し、レプリカセットを初期化します。
rs.initiate( { _id : "rs0" 、 バージョン: 1, メンバー: [ { _id: 0、ホスト: "127.0.0.1:27017" 、優先度: 1} 、 { _id: 1、ホスト: "127.0.0.1:27018" 、優先度: 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をレプリカセットモードで起動すると、プライマリノードのデータの他のノードへの同期が自動的に開始されます。 このプロセスは、システム性能に影響を及ぼし得る。 データが同期された後、システムのパフォーマンスは正常に戻ります。