Cómo copiar bases de datos MongoDB usando PHP ahora que copydb está en desuso

10

En MongoDB versión 4.2 copydby su copyDatabasecontenedor han quedado en desuso. El manual de MongoDB sugiere que ahora deberíamos usar mongodumpy mongorestore. Pero estaba llamando al comando copiar desde PHP usando el controlador MongoDB de PHP y los comandos de volcado y restauración son comandos que deben ejecutarse desde la línea de comandos y no tienen ningún equivalente PHP. ¿Cómo puedo ahora copiar una base de datos usando PHP?

Carlos Granados
fuente
1
Aunque es posible ejecutar mongodump / mongorestore desde PHP con funciones tipo shell_exec, es casi imposible descargar toda la base de datos al cliente y luego volver a cargarla.
Alex Blex
Supongo que no entiendo tu flujo de trabajo. ¿Simplemente desea crear una copia de seguridad / restauración de db en la máquina o desea proporcionar una descarga / descarga de la misma a través de un sitio web / servicio (a través de php)?
mrgremlin
Quiero copiar una base de datos con fines de prueba. Tenemos una base de datos con toda nuestra configuración inicial para la prueba y quiero copiarla en la base de datos de prueba antes de ejecutar las pruebas. Esto generalmente se inició de forma remota a través de una solicitud manejada por PHP
Carlos Granados
1
Solo para aclarar por qué alguna solución interna sería genial: en sistemas como Debian o Alpine (en versiones anteriores que todavía enviaban MongoDB), tenía que instalar otro paquete para todas las herramientas de shell. Es posible que estos no estén presentes en todos los sistemas que tienen una configuración MongoDB en ejecución
Nico Haase

Respuestas:

3

Puede usar "mongodump" y "mongorestore" como mencionó también. En PHP, puede usar shell_exec para ejecutar los comandos. Por ejemplo:

$backUpCommand = "mongodump --archive='/tmp/mongodump-dev-db' --db=dev";
shell_exec($backUpCommand);

$restoreCommand = "mongorestore --archive='/tmp/mongodump-dev-db' --db=test --nsFrom='test.*' --nsTo='examples.*'";
shell_exec($restoreCommand);

Tenga en cuenta que nsFrom y nsTo deben cambiar el nombre del espacio de nombres si lo necesita. Ver más detalles aquí .

En caso de que desee copiar el volcado a otro host, intente combinar --host params de mongorestore. Entonces, en ese caso, su comando de restauración sería:

$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);
Rajat Arora
fuente
1
Es posible, pero complica significativamente la configuración de la aplicación con dependencias externas de CLI, requerirá reservar un espacio SDD significativo en todos los servidores de aplicaciones para volcar la base de datos (varias veces en caso de solicitudes concurrentes), incurrirá en costos de transferencia de datos y puede ser bastante lento. En otras palabras, está bien como un trabajo manual único pero no para sistemas de producción.
Alex Blex
De acuerdo con Alex Blex. Esta "solución" es solo un 100% más compleja que la alternativa anterior
Carlos Granados