エントリーシリーズUbuntu 14.04でのMongoDBデータベースのバックアップ、リストア、移行


テンセントクラウド+コミュニティへようこそ、テンセントの大量の技術実践干物をもっと獲得してください.
本文は信姜縁がクラウド+コミュニティコラムに発表した.
MongoDBは最も人気のあるNoSQLデータベースエンジンの一つです.拡張性、強力性、信頼性、使いやすいことで知られています.この文書では、MongoDBデータベースのバックアップ、リストア、移行方法について説明します.
データベースのインポートとエクスポートは、他のソフトウェア製品と互換性のある、人間が読める形式でデータを処理することを意味します.逆に、バックアップとリストア操作では、MongoDB固有のバイナリ・データを作成または使用します.これにより、データの一貫性と整合性だけでなく、特定のMongoDB属性も保持されます.したがって、移行では、ソース・システムとターゲット・システムが互換性がある限り、バックアップとリカバリを使用するのが一般的です.Debianシステムを使用している場合は、テンセントクラウドがDebianにMongoDBをインストールする方法のチュートリアルを参照してください.
の準備を
このチュートリアルを学習する前に、次の準備が完了していることを確認してください.
  • Ubuntu 14.04サーバ
  • sudo権限を持つroot以外のユーザー.
  • インポート例MongoDBデータベース
  • 特に説明がない限り、このチュートリアルでroot権限を必要とするすべてのコマンドは、sudo権限を使用できる非rootユーザーとして実行する必要があります.
    基礎知識を知る
    本文を続ける前に、この問題について基本的な理解が必要です.MySQLなどのポピュラーなリレーショナル・データベース・システムを使用した経験がある場合は、MongoDBを使用すると似たような点が見つかる可能性があります.
    最初に知っておくべきことは、MongoDBがjsonとbson(バイナリjson)フォーマットを使用して情報を格納することです.Jsonは人間が読むことができるフォーマットで、データのエクスポートと最終インポートに非常に適しています.簡単なテキストエディタなど、jsonをサポートするツールを使用して、エクスポートされたデータをさらに管理することができます.
    一例jsonドキュメントは以下の通りです.
    Example of json Format
    {"address":[
        {"building":"1007", "street":"Park Ave"},
        {"building":"1008", "street":"New Ave"},
    ]}

    Jsonは非常に便利ですが、bsonで使用できるすべてのデータ型をサポートしていません.これは、jsonを使用すると、いわゆる「忠実度損失」が発生することを意味します.バックアップとリカバリでは、バイナリbsonを使用することが望ましい.
    次に、MongoDBデータベースを明示的に作成する心配はありません.インポートに使用するデータベースがまだ存在しないことを指定すると、自動的に作成されます.集合'(データベース・テーブル)構造の方が良いです.MongoDBでは、他のデータベース・エンジンに比べて、最初のドキュメント(データベース・ロー)の挿入時に構造が自動的に作成されます.
    第三に、MongoDBに大量のデータ(例えば、本明細書のタスク)を読み込みまたは挿入することは、大量のリソースを消費し、大量のCPU、メモリ、ディスク領域を消費する可能性がある.重要なことは、MongoDBが大規模なデータベースおよび大規模なデータによく使用されることを考慮することである.この問題を解決する最も簡単な方法は、夜間または非ピーク時にエクスポートおよびバックアップを実行することである.
    第四に、データベースのエクスポートまたはバックアップ中に情報が変化する忙しいMongoDBサーバがある場合、情報の一貫性に問題がある可能性があります.この問題には簡単な解決策はありませんが、本稿の最後に、レプリケーションの詳細についてのアドバイスを参照してください.
    インポートとエクスポート機能を使用してデータのバックアップとリストアを行うことができますが、MongoDBデータベースの整合性を確保する方法もあります.データをバックアップするには、mongodumpコマンドを使用します.リカバリするには、mongorestoreコマンドを使用します.それらがどのように働いているかを見てみましょう.
    MongoDBデータベースのバックアップ
    まず、MongoDBデータベースのバックアップについて説明します.mongodumpisの重要なパラメータ--dbで、バックアップするデータベースの名前を指定します.データベース名が指定されていない場合、mongodumpはすべてのデータベースをバックアップします.2番目の重要なパラメータは、データをダンプするディレクトリを指定する--outです.一例を挙げてnewdbデータベースをバックアップし、/var/backups/mongobackupsディレクトリに格納します.理想的には、/var/backups/mongobackups/01-20-16(2016 1 20 )などの現在の日付のディレクトリに各バックアップを配置します.まず、次のコマンドを使用してディレクトリを作成します./var/backups/mongobackups
    $ sudo mkdir /var/backups/mongobackups

    バックアップコマンドは次のとおりです.
    $ sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`

    バックアップが正常に実行されると、次のような出力が得られます.
    Output of mongodump
    2016-01-20T10:11:57.685-0500    writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
    2016-01-20T10:11:57.907-0500    writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
    2016-01-20T10:11:57.911-0500    done dumping newdb.restaurants (25359 documents)
    2016-01-20T10:11:57.911-0500    writing newdb.system.indexes to /var/backups/mongobackups/01-20-16/newdb/system.indexes.bson

    上記のディレクトリパスでは、現在の日付を自動的に取得する日付date+"%m-%d-%y"を使用しています.これにより、ディレクトリ/var/backups/01-20-16/にディレクトリを配置できます.これは、バックアップを自動的に実行する場合に特に便利です.
    このとき、/var/backups/mongobackups/01-20-16/newdb/ディレクトリでnewdbデータベースを完全にバックアップできます.このバックアップには、newdbを正しくリカバリし、いわゆる「忠実度」を保持するすべてのコンテンツが含まれています.
    一般的なルールとして、毎日バックアップを行うなど、定期的にバックアップを行う必要があります.サーバの負荷が最も小さいときにバックアップを行うことが望ましいです.したがって、mongodumpコマンドをcronジョブに設定して、毎日午前03:03などの定期的な実行を行うことができます.この開いているcrontabを完了するには、cronのエディタを以下に示します.
    $ sudo crontab -e
    sudo crontabを実行すると、rootユーザーのcronジョブが編集されます.ユーザーにcronsを設定すると、sudoプロファイルにパスワード検証が必要な場合に特に正しく実行できない可能性があります.
    crontabプロンプトに次のmongodumpコマンドを挿入します.
    Crontab window
    3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`

    上記のコマンドでは、通常、すべてのデータベースをバックアップする必要があるため、--dbパラメータを省略します.
    MongoDBデータベースのサイズによっては、バックアップのディスク容量がすぐに消費される可能性があります.そのため、古いバックアップを定期的にクリーンアップしたり圧縮したりすることをお勧めします.たとえば、7日以上のバックアップをすべて削除するには、次のbashコマンドを使用します.
    $ find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

    前のmongodumpコマンドと同様に、cronジョブとして追加することもできます.次のバックアップを開始する前に、たとえば午前03:01に実行する必要があります.このため、crontabを再度開きます.
    $ sudo crontab -e

    次の行を挿入します.
    Crontab window
    3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

    この手順のすべてのタスクを完了すると、MongoDBデータベースに適切なバックアップソリューションが提供されます.
    MongoDBデータベースのリカバリと移行
    以前のバックアップから前のステップのように、MongoDBデータベースをリカバリすると、特定の時間に取得したMongoDB情報の正確なコピーを取得できます.すべてのインデックスとデータ型が含まれます.MongoDBデータベースを移行する場合に特に便利です.MongoDBをリカバリするには、生成したバイナリ・バックアップとともにmongorestoreのコマンドmongodumpを使用します.
    newdbデータベースを例に続けて、以前のバックアップからリカバリする方法を見てみましょう.パラメータとして、まず--dbパラメータを使用してデータベースの名前を指定します.次に、--dropを使用して、ターゲット・データベースを最初に削除して、クリーンなデータベースでバックアップをリカバリすることを確認します.最後のパラメータとして、最後のバックアップ/var/backups/mongobackups/01-20-16/newdb/のディレクトリを指定します.
    これにより、コマンド全体が次のようになります(リカバリするバックアップ日に置き換えられます).
    $ sudo mongorestore --db newdb --drop /var/backups/mongobackups/01-20-16/newdb/

    正常に実行すると、次の出力結果が表示されます.
    Output of mongorestore
    2016-01-20T10:44:47.876-0500    building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir
    2016-01-20T10:44:47.908-0500    reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
    2016-01-20T10:44:47.909-0500    restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
    2016-01-20T10:44:48.591-0500    restoring indexes for collection newdb.restaurants from metadata
    2016-01-20T10:44:48.592-0500    finished restoring newdb.restaurants (25359 documents)
    2016-01-20T10:44:48.592-0500    done

    上記の例では、バックアップを作成した同じサーバでデータをリカバリします.データを別のサーバに移行し、同じテクノロジーを使用する場合は、バックアップ・ディレクトリ(例では/var/backups/mongobackups/01-20-16/newdb/)を別のサーバにコピーするだけです.
    結論
    この文書では、データベースのバックアップ、リストア、移行におけるMongoDBデータの管理のポイントについて説明します.
    レプリケーションは、伸縮性に役立つだけでなく、現在のトピックにも重要です.レプリケーションを使用すると、プライマリ・サーバをフェイルオーバからリカバリするときにMongoDBサーバからMongoDBサービスを継続的に実行できます.バックアップは通常夜間に行われますが、夜にバックアップをリカバリすることを決定すると、前回のバックアップ以降の更新はすべて失われます.生産環境のサーバーについては、テンセントクラウド関係型データベースを使用することをお勧めします.時間のかかるデータベース管理タスクから解放され、アプリケーションとビジネスに集中する時間を増やすことができます.
    参考文献:『How To Back Up,Restore,and Migrate a MongoDB Database on Ubuntu 14.04』
    に質問
    Angular 2はhttp応答をどのように処理しますか?
    関連読書
    HTTP/2のサーバープッシュ(Server Push)ベストプラクティス
    MySQLデータベースのバックアップ方法
    MySQL 8.0バージョン機能変更の紹介
    云学院·课程推荐|腾讯高级技师,带你快速入门机器学习
    この文章はすでに作者がテンセントクラウド+コミュニティに発表することを授権して、原文のリンク:https://cloud.tencent.com/dev...
    注目公众号「云加社区」を検索して、最初に技术の干物を手に入れて、注目した后に1024に返事してあなたに1部の技术の课程の大きい贈り物を送ります!
    大量の技術実践経験、クラウドプラスコミュニティで尽くします!