Nota
Esta funcionalidad no está disponible para clústeres gratuitos ni flexibles. Para aprender más sobre qué funcionalidades no están disponibles, consulte Límites del clúster gratuito de Atlas.
Puedes restaurar los datos archivados en S3, Azure o Google Cloud Storage utilizando mongoimport y mongorestore. Esta página contiene un procedimiento de ejemplo para importar datos archivados y reconstruir índices utilizando la CLI de AWS, azopy o gcloud, dependiendo de la fuente de datos, y las Database Tools de MongoDB.
Requisitos previos
Antes de comenzar, debes:
- Instala las herramientas mongoimport y mongorestore
Procedimiento
Copie los datos del bucket S a una carpeta3 usando la CLI de AWS y extraiga los datos.
aws s3 cp s3://<bucketName>/<prefix> <downloadFolder> --recursive gunzip -r <downloadFolder>
donde:
| Nombre del bucket AWS S3. | |
| Ruta a los datos de fichero en el bucket. La ruta tiene el siguiente formato: | |
| Ruta a la carpeta local donde se desea copiar los datos del fichero. |
Por ejemplo, ejecuta un comando similar al siguiente:
Ejemplo
aws s3 cp s3://export-test-bucket/exported_snapshots/1ab2cdef3a5e5a6c3bd12de4/12ab3456c7d89d786feba4e7/myCluster/2021-04-24T0013/1619224539 mybucket --recursive gunzip -r mybucket
Copia y guarda el siguiente script en un archivo massimport.sh llamado.
!/bin/bash regex='/(.+)/(.+)/.+' dir=${1%/} connstr=$2 iterate through the subdirectories of the downloaded and extracted snapshot export and restore the docs with mongoimport find $dir -type f -not -path '*/\.*' -not -path '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mongoimport --uri "$connstr" --mode=upsert -d $db_name -c $col_name --file $line --type json done create the required directory structure and copy/rename files as needed for mongorestore to rebuild indexes on the collections from exported snapshot metadata files and feed them to mongorestore find $dir -type f -name '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mkdir -p ${dir}/metadata/${db_name}/ cp $line ${dir}/metadata/${db_name}/${col_name}.metadata.json done mongorestore "$connstr" ${dir}/metadata/ remove the metadata directory because we do not need it anymore and this returns the snapshot directory in an identical state as it was prior to the import rm -rf ${dir}/metadata/
Aquí:
--mode=upsertpermite amongoimportgestionar documentos duplicados de un fichero.--uriespecifica la cadena de conexión para el clúster de Atlas.
Ejecute la massimport.sh utilidad para importar los datos archivados al clúster de Atlas.
sh massimport.sh <downloadFolder> "mongodb+srv://<connectionString>"
donde:
| Ruta a la carpeta local donde copió los datos del fichero. |
| Cadena de conexión para el clúster Atlas. |
Por ejemplo, ejecuta un comando similar al siguiente:
Ejemplo
sh massimport.sh mybucket "mongodb+srv://<myConnString>"
Copie los datos en el contenedor de Azure Blob Storage usando el CLI azcopy y extraiga los datos.
azcopy copy "https://<storageAccountName>.blob.core.windows.net/<containerName>/<prefix>/*" "<downloadFolder>" --recursive
donde:
| Nombre de la cuenta Azure a la que pertenece el contenedor de almacenamiento de blobs. |
| Nombre del contenedor de almacenamiento de blobs de Azure. |
| Ruta a los datos de fichero en el bucket. |
| Ruta a la carpeta local donde se desea copiar los datos del fichero. |
Ejemplo
azcopy copy "https://mystorageaccount.blob.core.windows.net/mycontainer/myTextFile.txt" "~/downloads" --recursive
Copia y guarda el siguiente script en un archivo massimport.sh llamado.
!/bin/bash regex='/(.+)/(.+)/.+' dir=${1%/} connstr=$2 iterate through the subdirectories of the downloaded and extracted snapshot export and restore the docs with mongoimport find $dir -type f -not -path '*/\.*' -not -path '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mongoimport --uri "$connstr" --mode=upsert -d $db_name -c $col_name --file $line --type json done create the required directory structure and copy/rename files as needed for mongorestore to rebuild indexes on the collections from exported snapshot metadata files and feed them to mongorestore find $dir -type f -name '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mkdir -p ${dir}/metadata/${db_name}/ cp $line ${dir}/metadata/${db_name}/${col_name}.metadata.json done mongorestore "$connstr" ${dir}/metadata/ remove the metadata directory because we do not need it anymore and this returns the snapshot directory in an identical state as it was prior to the import rm -rf ${dir}/metadata/
Aquí:
--mode=upsertpermite amongoimportgestionar documentos duplicados de un fichero.--uriespecifica la cadena de conexión para el clúster de Atlas.
Ejecute la massimport.sh utilidad para importar los datos archivados al clúster de Atlas.
sh massimport.sh <downloadFolder> "mongodb+srv://<connectionString>"
donde:
| Ruta a la carpeta local donde copió los datos del fichero. |
| Cadena de conexión para el clúster Atlas. |
Ejemplo
sh massimport.sh "~/downloads" "mongodb+srv://<myConnString>"
Copia los datos en el bucket de Google Cloud Storage usando la CLI gcloud y extrae los datos.
gsutil -m cp -r "gs://<bucketName>/<prefix> <downloadFolder>" --recursive gunzip -r <downloadFolder>
donde:
| Nombre del bucket de Google Cloud. | |
| Ruta a los datos de fichero en el bucket. La ruta tiene el siguiente formato: | |
| Ruta a la carpeta local donde se desea copiar los datos del fichero. |
Ejemplo
gsutil -m cp -r gs://export-test-bucket/exported_snapshots/1ab2cdef3a5e5a6c3bd12de4/12ab3456c7d89d786feba4e7/myCluster/2021-04-24T0013/1619224539 mybucket --recursive gunzip -r mybucket
Copia y guarda el siguiente script en un archivo massimport.sh llamado.
!/bin/bash regex='/(.+)/(.+)/.+' dir=${1%/} connstr=$2 iterate through the subdirectories of the downloaded and extracted snapshot export and restore the docs with mongoimport find $dir -type f -not -path '*/\.*' -not -path '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mongoimport --uri "$connstr" --mode=upsert -d $db_name -c $col_name --file $line --type json done create the required directory structure and copy/rename files as needed for mongorestore to rebuild indexes on the collections from exported snapshot metadata files and feed them to mongorestore find $dir -type f -name '*metadata\.json' | while read line ; do [[ $line =~ $regex ]] db_name=${BASH_REMATCH[1]} col_name=${BASH_REMATCH[2]} mkdir -p ${dir}/metadata/${db_name}/ cp $line ${dir}/metadata/${db_name}/${col_name}.metadata.json done mongorestore "$connstr" ${dir}/metadata/ remove the metadata directory because we do not need it anymore and this returns the snapshot directory in an identical state as it was prior to the import rm -rf ${dir}/metadata/
Aquí:
--mode=upsertpermite amongoimportgestionar documentos duplicados de un fichero.--uriespecifica la cadena de conexión para el clúster de Atlas.
Ejecute la utilidad massimport.sh para importar los datos archivados en el clúster Atlas.
sh massimport.sh <downloadFolder> "mongodb+srv://<connectionString>"
donde:
| Ruta a la carpeta local donde copió los datos del fichero. |
| Cadena de conexión para el clúster Atlas. |
Ejemplo
sh massimport.sh mybucket "mongodb+srv://<myConnString>"