So kopieren Sie MongoDB-Datenbanken mit PHP, nachdem copydb veraltet ist

10

In MongoDB sind Version 4.2 copydbund sein copyDatabaseWrapper veraltet. Das MongoDB-Handbuch schlägt vor, dass wir jetzt mongodumpund verwenden sollten mongorestore. Aber ich habe den Befehl copy von PHP mit dem PHP MongoDB-Treiber aufgerufen, und die Befehle dump und restore sind Befehle, die über die Befehlszeile ausgeführt werden müssen und keine PHP-Entsprechung haben. Wie kann ich jetzt eine Datenbank mit PHP kopieren?

Carlos Granados
quelle
1
Obwohl es möglich ist, mongodump / mongorestore von PHP aus mit Funktionen von shell_exec auszuführen, ist es kaum möglich, die gesamte Datenbank auf den Client herunterzuladen und dann wieder hochzuladen.
Alex Blex
Ich glaube, ich verstehe Ihren Workflow nicht. Möchten Sie einfach ein DB-Backup / Restore auf dem Computer erstellen oder möchten Sie ein Up / Download desselben über eine Website / einen Dienst (über PHP) bereitstellen?
Mrgremlin
Ich möchte eine Datenbank zu Testzwecken kopieren. Wir haben eine Datenbank mit all unseren anfänglichen Setups zum Testen und ich möchte sie in die Testdatenbank kopieren, bevor die Tests ausgeführt werden. Dies wurde normalerweise aus der Ferne durch eine Anfrage von PHP
Carlos Granados
1
Um zu verdeutlichen, warum eine interne Lösung großartig wäre: Auf Systemen wie Debian oder Alpine (in früheren Versionen, in denen MongoDB noch ausgeliefert wurde) mussten Sie ein weiteres Paket für zusätzliche Shell-Tools installieren. Diese sind möglicherweise nicht auf allen Systemen vorhanden, auf denen MongoDB ausgeführt wird
Nico Haase,

Antworten:

3

Sie können auch "Mongodump" und "Mongorestore" verwenden, wie Sie bereits erwähnt haben. In PHP können Sie shell_exec verwenden, um die Befehle auszuführen. Zum Beispiel:

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

Bitte beachten Sie, dass nsFrom und nsTo den Namespace bei Bedarf umbenennen sollen. Weitere Details hier .

Wenn Sie den Speicherauszug auf einen anderen Host kopieren möchten, versuchen Sie, --host params of mongorestore zu kombinieren. In diesem Fall wäre Ihr Wiederherstellungsbefehl also:

$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
quelle
1
Es ist möglich, aber es erschwert die Anwendungskonfiguration mit externen CLI-Abhängigkeiten erheblich. Es muss erheblicher SDD-Speicherplatz auf allen Anwendungsservern reserviert werden, um die Datenbank zu sichern (bei gleichzeitigen Anforderungen mehrmals). Dies verursacht Datenübertragungskosten und kann recht hoch sein langsam. Mit anderen Worten - es ist als einmaliger manueller Job in Ordnung, aber nicht für Produktionssysteme.
Alex Blex
Stimmen Sie mit Alex Blex überein. Diese "Lösung" ist nur 100% komplexer als die vorherige Alternative
Carlos Granados