sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo restaurar una colección específica en MongoDB usando la copia de seguridad lógica

Mantener copias de seguridad de su base de datos es una de las tareas más importantes en cualquier entorno de producción. Es el proceso de copiar sus datos a algún otro lugar para mantenerlos seguros. Esto puede ser útil en la recuperación de situaciones de emergencia como la corrupción de la base de datos o una base de datos que falla sin posibilidad de reparación.

Además de la recuperación, una copia de seguridad también se puede usar para imitar una base de datos de producción para probar una aplicación en un entorno diferente, o incluso para depurar algo que no se puede hacer en la base de datos de producción.

Hay varios métodos de copias de seguridad de bases de datos que puede implementar, desde copias de seguridad lógicas utilizando herramientas que están integradas en la base de datos (por ejemplo, mysqldump, mongodump, pg_dump) hasta copias de seguridad físicas utilizando herramientas de terceros (por ejemplo. xtrabackup, barman, pgbackrest, copia de seguridad consistente mongodb).

El método a utilizar a menudo depende de cómo le gustaría restaurar. Por ejemplo, suponga que dejó caer una tabla o una colección por error. Por improbable que parezca, sucede. Entonces, la forma más rápida de recuperar sería restaurar solo esa tabla o colección, en lugar de tener que restaurar una base de datos completa.

Copia de seguridad y restauración en Mongodb

Mongodump y mongorestore es la herramienta para la copia de seguridad lógica utilizada en MongoDB, es una especie de mysqldump en MySQL o pg_dump en PostgreSQL. La utilidad mongodump y mongorestore se incluirá cuando instale MongoDB y volcará los datos en formato BSON. Mongodump se utiliza para hacer una copia de seguridad lógica de la base de datos en archivos de volcado, mientras que mongorestore se utiliza para la operación de restauración.

Los comandos

mongodump y mongorestore son fáciles de usar, aunque hay muchas opciones.

Como podemos ver a continuación, puede respaldar bases de datos o colecciones específicas. Incluso puede tomar una instantánea de un punto en el tiempo al incluir el registro de operaciones.

[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

Hay muchas opciones en el comando mongorestore, la opción obligatoria está relacionada con las opciones de conexión como host, puerto y autenticación. Hay otros parámetros, como -j que se usa para restaurar colecciones en paralelo, -c o --collection se usa para una colección específica, y -d o --db se usa para definir una base de datos específica. La lista de opciones del parámetro mongorestore se puede mostrar usando la ayuda: 

[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)

La restauración de colecciones específicas en MongoDB se puede hacer usando la colección de parámetros en mongorestore. Suponga que tiene una base de datos de pedidos, dentro de la base de datos de pedidos hay algunas colecciones como se muestra a continuación:

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

Ya hemos programado una copia de seguridad para la base de datos de pedidos y queremos restaurar la colección de existencias en una nueva base de datos order_new en el mismo servidor. Si desea usar la opción --colección, debe pasar el nombre de la colección como parámetro de mongorestore o puede usar la opción --nsInclude={db}.{colección} si no especificó la ruta al archivo de la colección .

[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

Puede consultar la colección en la base de datos order_new como se muestra a continuación:

​my_mongodb_0:PRIMARY> use order_new;

switched to db order_new

my_mongodb_0:PRIMARY> show collections;

stock

Cómo podemos restaurar usando mongodump en ClusterControl

Restaurar un volcado de respaldo a través de ClusterControl es fácil, solo necesita 2 pasos para restaurar el respaldo. Habrá muchos archivos de copia de seguridad en la lista si habilitó su programa de copia de seguridad, hay información sobre las copias de seguridad que puede ser muy útil. Por ejemplo, el estado de la copia de seguridad que indica si la copia de seguridad se completó o falló, el método de copia de seguridad que se tomó, la lista de bases de datos y el tamaño del volcado. Los pasos para restaurar los datos de MongoDB a través de ClusterControl son los siguientes:

Paso uno

Siga las indicaciones para restaurar la copia de seguridad en un nodo como se muestra a continuación...

Paso dos

Debe elegir qué copia de seguridad debe restaurarse.

Paso tres

Revisar el resumen...