Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

movePrimary (comando de base de datos)

movePrimary

En un clúster particionado, movePrimary vuelve a asignar la partición primaria que alberga todas las colecciones sin particionar en la base de datos. movePrimary primero cambia la partición primaria en los metadatos del clúster y luego migra todas las colecciones no particionadas a la partición especificada. Utiliza el comando con el siguiente formato:

db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } )

Por ejemplo, el siguiente comando mueve la partición primaria de test a shard0001:

db.adminCommand( { movePrimary : "test", to : "shard0001" } )

Cuando el comando retorna, la partición primaria de la base de datos se ha cambiado a la partición especificada. Para desactivar completamente una partición, utiliza el comando removeShard.

movePrimary es un comando administrativo que solo está disponible para mongos instancias.

Advertencia

Tras iniciar movePrimary, no realices ninguna operación de lectura o escritura en colecciones sin particionar de esa base de datos hasta que el comando se haya completado. Las operaciones de lectura o guardado emitidas contra esas colecciones durante la migración pueden resultar en un comportamiento inesperado, incluyendo la posible falla de la operación de migración o la pérdida de datos.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

mongos usa el nivel de confirmación de escritura (write concern) "majority" para movePrimary.

Ejecute movePrimary sólo después de que mueva las colecciones no fragmentadas utilizando sh.moveCollection(). A partir de MongoDB 8.0, las colecciones no desplazadas y no particionadas no estarán disponibles durante el proceso movePrimary.

Si la base de datos que se está trasladando contiene colecciones no fragmentadas que usan MongoDB Search, sus índices de búsqueda quedarán inaccesibles después de que movePrimary se complete. Porque movePrimary actualiza el UUID para colecciones No Particionadas que mueve, debe reconstruir manualmente los índices de MongoDB Search en esas colecciones.

movePrimary puede requerir un tiempo significativo para completarse dependiendo del tamaño de la base de datos y factores como la salud de la red o los recursos de la máquina. Durante la migración, los intentos de guardar o realizar cualquier operación DDL en las colecciones no particionadas de la base de datos que se está trasladando fallan con el error: "movePrimary is in progress".

Considere programar un periodo de mantenimiento durante la cual las aplicaciones detengan todas las lecturas y escrituras en el clúster. Emitir movePrimary durante un tiempo de inactividad programado mitiga el riesgo de encontrar un comportamiento indefinido debido a lecturas o escrituras entrelazadas en las colecciones no particionadas de la base de datos.

movePrimary falla si la partición de destino contiene un namespace de colección en conflicto. Por ejemplo:

  1. Un administrador emite movePrimary para cambiar la partición primaria de la base de datos hr.

  2. Un usuario o una aplicación emite una operación de guardar en una colección no particionada en hr mientras movePrimary está moviendo esa colección. La operación de guardar crea la colección en la partición primaria original.

  3. Un administrador posteriormente emite movePrimary para restaurar la partición primaria original para la base de datos hr.

  4. movePrimary falla debido al namespace en conflicto que queda tras la operación de escritura entrelazada.

Como parte de la movePrimary operación, la partición de destino debe volver a construir los índices en las colecciones migradas después de convertirse en la partición primaria. Esto puede requerir una cantidad significativa de tiempo dependiendo de la cantidad de índices por colección y de la cantidad de datos por indexar.

Consulta Creación de índices en colecciones pobladas para más información sobre el proceso de creación de índices.

A partir de MongoDB 8.0, movePrimary no invalida las colecciones de eventos que tienen flujos de cambios. Los flujos de cambios pueden seguir leyendo eventos de las colecciones después de que las colecciones se trasladen a una nueva partición.

En versiones anteriores de MongoDB, movePrimary invalida los change streams de la colección y los change streams no pueden leer eventos de las colecciones.

En todas las versiones de MongoDB, movePrimary actualiza el UUID para colecciones no particionadas que se han movido.

Consulta remover particiones de un clúster para un procedimiento completo.

Volver

moveCollection

En esta página