ウェブサイト検索

MongoDBデータベースのバックアップと移行方法


データベースの移行は、すべてのシステム管理者がいつかは行わなければならないことです。幸いなことに、MongoDBはバックアップの作成と復元用の組み込みコマンドを提供しており、新しいサーバーへの移行を容易にしています。

mongodumpを使用してバックアップを作成する

mongodumpは、データベースとそのコレクションのバックアップファイルを作成するシンプルなコマンドで、そこから復元することができます。バックアップ作業中と新しいサーバーの立ち上げ中は、一時的なダウンタイムが必要になります。

ダウンタイムを避けたい場合は、クラスタに新しいノードを追加し、それを主要な書き込みソースとして設定し、その後新しいノードにホットスワップすることでクラスタ移行を行うことができます。MongoDB Atlasを使用している場合、これは非常に簡単になります。彼らの管理されたデータベースサービスです。

mongodumpはずっと簡単です。バックアップ用のディレクトリを作成する必要があります:

sudo mkdir /var/backups/mongobackups

その後、mongodumpを実行し、データベースパラメータと出力場所を渡します:

sudo mongodump --db databasename --out /var/backups/mongobackups/backup

特定のコレクションを手動でダンプすることもできます。 --collection フラグを使用してください。

Mongodumpはライブデータベース上で実行でき、バックアップを作成するのに数秒しかかかりません。ただし、サーバーを移動しているため、データベースへの書き込みは実質的に失われることになります。このため、ダンプを作成する前にトラフィックを無効にしたいでしょう。

バックアップからの復元

古いサーバーから新しいサーバーにバックアップファイルを転送する必要があります。これはFTPを使ってダウンロードし、それを新しいサーバーにアップロードすることで実行できますが、大きなバックアップの場合は、直接接続を確立してscpを使用して転送するのが最適です。

次のコマンドを使用できますが、ユーザー名とホスト名はサーバーの値に置き換えてください。

scp user@SRC_HOST:/var/backups/mongobackups/FILENAME  user@DEST_HOST:~/FILENAME

それから、新しいサーバーにバックアップがある状態で、バックアップからロードできます。当然のことながら、新しいサーバーにはMongoDBをインストールする必要があります。

それを行うには、mongorestore コマンドを使用できます:

mongorestore <options> <connection-string> <file to restore>

新しいデータベースに新しいテーブルがすぐに利用可能になるはずです。

すべてが正しく転送されたことを確認した後、新しいサーバーにトラフィックを切り替える必要があります。これは、おそらくDNSレコードを更新することで行われます。AWSやElastic IPアドレスを使用している同様のプロバイダーの場合、アドレスを新しいサーバーにポイントするように切り替えることができ、DNSの更新は必要ありません。

ディスク全体の転送(オプション)

オプションとして、より強力なサーバーに移行する場合は、ブートドライブ全体を転送することができます。これにより、データベースとサーバー設定の残りの部分もコピーされるはずです。

この場合、データをターゲットサーバーに直接アップロードするためにrsyncコマンドを使用する必要があります。rsyncはSSHを使用して接続し、2つのフォルダーを同期します。この場合、ローカルフォルダーをリモートサーバーにプッシュしたいと考えています:

sudo rsync -azAP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} username@remote_host:/

それが全コマンドです。転送が完了するにつれてプログレスバーが表示され(-zフラグを使用して圧縮が行われます)、完了すると新しいサーバーのターゲットフォルダにファイルが表示されます。各フォルダをコピーするためにこれを複数回実行する必要があるかもしれません; 各実行のためにコマンドを生成するには、このオンラインのrsyncコマンドジェネレーターを使用できます。

関連記事: