sql >> データベース >  >> NoSQL >> MongoDB

論理バックアップを使用してMongoDBで特定のコレクションを復元する方法

    データベースのバックアップを保持することは、本番環境で最も重要なタスクの1つです。これは、データを安全に保つために他の場所にデータをコピーするプロセスです。これは、データベースの破損や修復できないほどのデータベースのクラッシュなどの緊急事態からの回復に役立ちます。

    リカバリとは別に、バックアップを使用して、本番データベースを模倣し、別の環境でアプリケーションをテストしたり、本番データベースでは実行できないものをデバッグしたりすることもできます。

    >

    データベースに組み込まれているツール(mysqldump、mongodump、pg_dumpなど)を使用した論理バックアップから、サードパーティツール(例:mysqldump)を使用した物理バックアップまで、実装できるデータベースバックアップにはさまざまな方法があります。 xtrabackup、barman、pgbackrest、mongodb一貫性のあるバックアップ)。

    どの方法を使用するかは、多くの場合、復元方法によって決まります。たとえば、誤ってテーブルまたはコレクションを削除したとします。思われるかもしれませんが、それは起こります。したがって、回復するための最速の方法は、データベース全体を復元するのではなく、そのテーブルまたはコレクションだけを復元することです。

    Mongodbでのバックアップと復元

    Mongodumpとmongorestoreは、MongoDBで使用される論理バックアップ用のツールであり、MySQLではmysqldump、PostgreSQLではpg_dumpの一種です。 MongoDBをインストールすると、mongodumpおよびmongorestoreユーティリティが含まれ、データをBSON形式でダンプします。 Mongodumpはデータベースを論理的にダンプファイルにバックアップするために使用され、mongorestoreは復元操作に使用されます。

    mongodumpおよびmongorestoreコマンドは、多くのオプションがありますが、簡単に使用できます。

    以下に示すように、特定のデータベースまたはコレクションをバックアップできます。 oplogを含めることで、POSスナップショットを作成することもできます。

    [email protected]:~# mongodump --help
    
    Usage:
    
      mongodump <options>
    
    
    
    Export the content of a running server into .bson files.
    
    
    
    Specify a database with -d and a collection with -c to only dump that database or collection.
    
    
    
    See http://docs.mongodb.org/manual/reference/program/mongodump/ for more information.
    
    
    
    general options:
    
          --help                                                print usage
    
          --version                                             print the tool version and exit
    
    
    
    verbosity options:
    
      -v, --verbose=<level>                                     more detailed log output (include multiple times for more verbosity, e.g. -vvvvv, or specify a numeric value, e.g. --verbose=N)
    
          --quiet                                               hide all log output
    
    
    
    connection options:
    
      -h, --host=<hostname>                                     mongodb host to connect to (setname/host1,host2 for replica sets)
    
          --port=<port>                                         server port (can also use --host hostname:port)
    
    
    
    kerberos options:
    
          --gssapiServiceName=<service-name>                    service name to use when authenticating using GSSAPI/Kerberos ('mongodb' by default)
    
          --gssapiHostName=<host-name>                          hostname to use when authenticating using GSSAPI/Kerberos (remote server's address by default)
    
    
    
    ssl options:
    
          --ssl                                                 connect to a mongod or mongos that has ssl enabled
    
          --sslCAFile=<filename>                                the .pem file containing the root certificate chain from the certificate authority
    
          --sslPEMKeyFile=<filename>                            the .pem file containing the certificate and key
    
          --sslPEMKeyPassword=<password>                        the password to decrypt the sslPEMKeyFile, if necessary
    
          --sslCRLFile=<filename>                               the .pem file containing the certificate revocation list
    
          --sslAllowInvalidCertificates                         bypass the validation for server certificates
    
          --sslAllowInvalidHostnames                            bypass the validation for server name
    
          --sslFIPSMode                                         use FIPS mode of the installed openssl library
    
    
    
    authentication options:
    
      -u, --username=<username>                                 username for authentication
    
      -p, --password=<password>                                 password for authentication
    
          --authenticationDatabase=<database-name>              database that holds the user's credentials
    
          --authenticationMechanism=<mechanism>                 authentication mechanism to use
    
    
    
    namespace options:
    
      -d, --db=<database-name>                                  database to use
    
      -c, --collection=<collection-name>                        collection to use
    
    
    
    uri options:
    
          --uri=mongodb-uri                                     mongodb uri connection string
    
    
    
    query options:
    
      -q, --query=                                              query filter, as a JSON string, e.g., '{x:{$gt:1}}'
    
          --queryFile=                                          path to a file containing a query filter (JSON)
    
          --readPreference=<string>|<json>                      specify either a preference name or a preference json object
    
          --forceTableScan                                      force a table scan
    
    
    
    output options:
    
      -o, --out=<directory-path>                                output directory, or '-' for stdout (defaults to 'dump')
    
          --gzip                                                compress archive our collection output with Gzip
    
          --repair                                              try to recover documents from damaged data files (not supported by all storage engines)
    
          --oplog                                               use oplog for taking a point-in-time snapshot
    
          --archive=<file-path>                                 dump as an archive to the specified path. If flag is specified without a value, archive is written to stdout
    
          --dumpDbUsersAndRoles                                 dump user and role definitions for the specified database
    
          --excludeCollection=<collection-name>                 collection to exclude from the dump (may be specified multiple times to exclude additional collections)
    
          --excludeCollectionsWithPrefix=<collection-prefix>    exclude all collections from the dump that have the given prefix (may be specified multiple times to exclude additional prefixes)
    
      -j, --numParallelCollections=                             number of collections to dump in parallel (4 by default) (default: 4)
    
          --viewsAsCollections                                  dump views as normal collections with their produced data, omitting standard collections

    mongorestoreコマンドには多くのオプションがあり、必須オプションはホスト、ポート、認証などの接続オプションに関連しています。コレクションを並列に復元するために使用される-j、特定のコレクションに使用される-cまたは--collection、特定のデータベースを定義するために使用される-dまたは--dbなど、他のパラメーターがあります。 mongorestoreパラメータのオプションのリストは、ヘルプを使用して表示できます:

    [email protected]:~# mongorestore --help
    
    Usage:
    
      mongorestore <options> <directory or file to restore>
    
    
    
    Restore backups generated with mongodump to a running server.
    
    
    
    Specify a database with -d to restore a single database from the target directory,
    
    or use -d and -c to restore a single collection from a single .bson file.
    
    
    
    See http://docs.mongodb.org/manual/reference/program/mongorestore/ for more information.
    
    
    
    general options:
    
          --help                                                print usage
    
          --version                                             print the tool version and exit
    
    
    
    verbosity options:
    
      -v, --verbose=<level>                                     more detailed log output (include multiple times for more verbosity, e.g. -vvvvv, or specify a numeric value, e.g. --verbose=N)
    
          --quiet                                               hide all log output
    
    
    
    connection options:
    
      -h, --host=<hostname>                                     mongodb host to connect to (setname/host1,host2 for replica sets)
    
          --port=<port>                                         server port (can also use --host hostname:port)
    
    
    
    kerberos options:
    
          --gssapiServiceName=<service-name>                    service name to use when authenticating using GSSAPI/Kerberos ('mongodb' by default)
    
          --gssapiHostName=<host-name>                          hostname to use when authenticating using GSSAPI/Kerberos (remote server's address by default)
    
    
    
    ssl options:
    
          --ssl                                                 connect to a mongod or mongos that has ssl enabled
    
          --sslCAFile=<filename>                                the .pem file containing the root certificate chain from the certificate authority
    
          --sslPEMKeyFile=<filename>                            the .pem file containing the certificate and key
    
          --sslPEMKeyPassword=<password>                        the password to decrypt the sslPEMKeyFile, if necessary
    
          --sslCRLFile=<filename>                               the .pem file containing the certificate revocation list
    
          --sslAllowInvalidCertificates                         bypass the validation for server certificates
    
          --sslAllowInvalidHostnames                            bypass the validation for server name
    
          --sslFIPSMode                                         use FIPS mode of the installed openssl library
    
    
    
    authentication options:
    
      -u, --username=<username>                                 username for authentication
    
      -p, --password=<password>                                 password for authentication
    
          --authenticationDatabase=<database-name>              database that holds the user's credentials
    
          --authenticationMechanism=<mechanism>                 authentication mechanism to use
    
    
    
    uri options:
    
          --uri=mongodb-uri                                     mongodb uri connection string
    
    
    
    namespace options:
    
      -d, --db=<database-name>                                  database to use when restoring from a BSON file
    
      -c, --collection=<collection-name>                        collection to use when restoring from a BSON file
    
          --excludeCollection=<collection-name>                 DEPRECATED; collection to skip over during restore (may be specified multiple times to exclude additional collections)
    
          --excludeCollectionsWithPrefix=<collection-prefix>    DEPRECATED; collections to skip over during restore that have the given prefix (may be specified multiple times to exclude additional prefixes)
    
          --nsExclude=<namespace-pattern>                       exclude matching namespaces
    
          --nsInclude=<namespace-pattern>                       include matching namespaces
    
          --nsFrom=<namespace-pattern>                          rename matching namespaces, must have matching nsTo
    
          --nsTo=<namespace-pattern>                            rename matched namespaces, must have matching nsFrom
    
    
    
    input options:
    
          --objcheck                                            validate all objects before inserting
    
          --oplogReplay                                         replay oplog for point-in-time restore
    
          --oplogLimit=<seconds>[:ordinal]                      only include oplog entries before the provided Timestamp
    
          --oplogFile=<filename>                                oplog file to use for replay of oplog
    
          --archive=<filename>                                  restore dump from the specified archive file. If flag is specified without a value, archive is read from stdin
    
          --restoreDbUsersAndRoles                              restore user and role definitions for the given database
    
          --dir=<directory-name>                                input directory, use '-' for stdin
    
          --gzip                                                decompress gzipped input
    
    
    
    restore options:
    
          --drop                                                drop each collection before import
    
          --dryRun                                              view summary without importing anything. recommended with verbosity
    
          --writeConcern=<write-concern>                        write concern options e.g. --writeConcern majority, --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}'
    
          --noIndexRestore                                      don't restore indexes
    
          --noOptionsRestore                                    don't restore collection options
    
          --keepIndexVersion                                    don't update index version
    
          --maintainInsertionOrder                              preserve order of documents during restoration
    
      -j, --numParallelCollections=                             number of collections to restore in parallel (4 by default) (default: 4)
    
          --numInsertionWorkersPerCollection=                   number of insert operations to run concurrently per collection (1 by default) (default: 1)
    
          --stopOnError                                         stop restoring if an error is encountered on insert (off by default)
    
          --bypassDocumentValidation                            bypass document validation
    
          --preserveUUID                                        preserve original collection UUIDs (off by default, requires drop)

    MongoDBで特定のコレクションを復元するには、mongorestoreのパラメーターコレクションを使用します。注文データベースがあると仮定します。注文データベース内には、以下に示すようなコレクションがいくつかあります。

    my_mongodb_0:PRIMARY> show dbs;
    
    admin   0.000GB
    
    config  0.000GB
    
    local   0.000GB
    
    orders  0.000GB
    
    my_mongodb_0:PRIMARY> use orders;
    
    my_mongodb_0:PRIMARY> show collections;
    
    order_details
    
    orders
    
    stock

    注文データベースのバックアップはすでにスケジュールされており、同じサーバー内の新しいデータベースorder_newに在庫コレクションを復元したいと考えています。オプション--collectionを使用する場合は、mongorestoreのパラメータとしてコレクション名を渡す必要があります。コレクションファイルへのパスを指定しなかった場合は、オプション--nsInclude={db}。{collection}を使用できます。 。

    [email protected]:~/dump/orders# mongorestore -umongoadmin --authenticationDatabase admin --db order_new --collection stock /root/dump/orders/stock.bson
    
    Enter password:
    
    ​2020-03-09T04:06:29.100+0000 checking for collection data in /root/dump/orders/stock.bson
    
    2020-03-09T04:06:29.110+0000 reading metadata for order_new.stock from /root/dump/orders/stock.metadata.json
    
    2020-03-09T04:06:29.134+0000 restoring order_new.stock from /root/dump/orders/stock.bson
    
    2020-03-09T04:06:29.202+0000 no indexes to restore
    
    2020-03-09T04:06:29.203+0000 finished restoring order_new.stock (1 document)
    
    2020-03-09T04:06:29.203+0000 done

    以下に示すように、order_newデータベースのコレクションを確認できます:

    ​my_mongodb_0:PRIMARY> use order_new;
    
    switched to db order_new
    
    my_mongodb_0:PRIMARY> show collections;
    
    stock

    ClusterControlでmongodumpを使用して復元する方法

    ClusterControlを介したバックアップダンプの復元は簡単です。バックアップを復元するには、2つの手順が必要です。バックアップスケジュールを有効にした場合、リストには多くのバックアップファイルが含まれます。バックアップに関するいくつかの情報が非常に役立ちます。たとえば、バックアップが完了/失敗したかどうかを示すバックアップのステータス、バックアップの実行方法、データベースのリスト、およびダンプのサイズ。 ClusterControlを介してMongoDBデータを復元する手順は次のとおりです:

    ステップ1

    以下に示すように、プロンプトに従ってバックアップをノードに復元します...

    ステップ2 復元する必要のあるバックアップを選択する必要があります。

    ステップ3 概要を確認...


    1. MongoDB find()

    2. MongoDBスキーマ設計-小さなドキュメントが多いですか、それとも大きなドキュメントが少ないですか?

    3. OSXでのmongodHostnameCanonicalizationWorkerエラー

    4. spark-submitを介して追加のjarファイルをSparkに渡す