Come copiare i database MongoDB usando PHP ora che Copydb è obsoleto


10

In MongoDB la versione 4.2 copydbe il suo copyDatabasewrapper sono stati deprecati. Il manuale MongoDB suggerisce che ora dovremmo usare mongodumpe mongorestore. Ma stavo chiamando il comando di copia da PHP usando il driver PHP MongoDB e i comandi dump e restore sono comandi che devono essere eseguiti dalla riga di comando e non hanno alcun equivalente PHP. Come posso ora copiare un database usando PHP?


1
Anche se è possibile eseguire mongodump / mongorestore da PHP con il tipo di funzioni shell_exec, è quasi impossibile scaricare l'intero database sul client e quindi caricarlo di nuovo.
Alex Blex,

Immagino di non capire il tuo flusso di lavoro. Vuoi semplicemente creare un backup / ripristino db sul computer o vuoi fornire un up / download dello stesso attraverso un sito Web / servizio (tramite php)?
mggremlin,

Voglio copiare un database a scopo di test. Abbiamo un database con tutta la nostra configurazione iniziale per i test e voglio copiarlo nel database dei test prima che vengano eseguiti i test. Questo di solito veniva avviato da remoto tramite una richiesta gestita da PHP
Carlos Granados il

1
Solo per chiarire perché una soluzione interna sarebbe ottima: su sistemi come Debian o Alpine (nelle precedenti versioni che ancora spedivano MongoDB), dovevi installare un altro pacchetto per tutti gli strumenti di shell. Questi potrebbero non essere presenti su tutti i sistemi che hanno una configurazione MongoDB in esecuzione
Nico Haase,

Risposte:


3

Puoi anche usare "mongodump" e "mongorestore" come hai già detto. In PHP, puoi usare shell_exec per eseguire i comandi. Per esempio:

$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);

Nota nsFrom e nsPer rinominare lo spazio dei nomi se ne hai bisogno. Vedi maggiori dettagli qui .

Se vuoi copiare il dump su un altro host, prova a combinare i parametri --host di mongorestore. Quindi, in tal caso, il comando di ripristino sarebbe:

$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);

1
È possibile, ma complica in modo significativo la configurazione dell'applicazione con dipendenze dalla CLI esterna, richiederà di riservare uno spazio SDD significativo su tutti i server applicazioni per scaricare il database (più volte in caso di richieste simultanee), comporterà costi di trasferimento dei dati e potrebbe essere piuttosto lento. In altre parole: va bene come lavoro manuale una tantum, ma non per i sistemi di produzione.
Alex Blex,

Concordo con Alex Blex. Questa "soluzione" è solo il 100% più complessa della precedente alternativa
Carlos Granados,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.