2016-08-11 2 views
0

Ich habe ein starkes Skript, das eine db sinkt und stellt die db aus einer vorhandenen Sicherung (SQL)Kann ich den Befehl mongorestore in einer groovigen Datei ausführen?

Sql sql = Sql.newInstance(dbSQLUrl, userName, password) 

ich die erforderlichen Parameter alle bestanden und lief sql.execute() wie unten,

sql.execute(
     alter database dbName 
     set offline with rollback immediate 
     drop database dbName 
     ) 


sql.execute(
    RESTORE DATABASE dbName 
    FROM disk = 'C:\Backups' 
    WITH REPLACE 
) 

All Der obige Code funktioniert einwandfrei. Ich muss dies auch für MongoDB implementieren. Gibt es ein Äquivalent zu sql.execute() in Mongo, wo ich Mongo-Befehl wie mongorestore in groovy Datei ausführen kann.

Für Mongo Ich habe den folgenden Code:

List credentials = [] 
List servers = [] 

credentials.push(MongoCredential.createCredential(mongoUserName, mongoDBName, mongoPassword as char[])) 
servers.push(new ServerAddress(mongoHost, mongoPort)) 

GMongoClient mongoClient = new GMongoClient(servers,credentials) 
DB mongoDB = mongoClient.getDB(mongoDBName) 
mongoDB.dropDatabase() 

Jetzt muss ich laufen/include den folgenden Befehl in meinem groovy Datei, mongorestore ~/backups/first_backup/

Gibt es eine Möglichkeit, dies erreichen kann?

Antwort

0

nicht sicher, dass dies die effizienteste Art und Weise zu tun, was man braucht, aber Sie können diesen Befehl aufrufen und warten Sie, indem Sie diesen, um Ihren Code zu beenden:

String command = "mongorestore ${System.properties['user.home']}/backups/first_backup" 
Process p = command.execute() 
p.waitFor() 
+0

Ich habe den folgenden Code, String command = "" "mongorestore $ dbBackUpPath" "" Process p = command.execute(), die basckup-db wird nicht erstellt, während wenn ich den folgenden Code in der Befehlszeile ausführen, mongorestore/home/backups/test funktioniert es gut. Ich sehe, dass die Test-DB wiederhergestellt wird. – Sharath

+0

Haben Sie 'p.waitFor()' hinzugefügt? Sie müssen warten, bis der Befehl beendet ist. Um zu debuggen, fügen Sie 'println p.in.text + p.err.text' nach' p = command.execute() 'hinzu und sehen Sie, was der' mongorestore' gerade druckt. –

+1

Mein Fehler Ich habe den Pfad falsch übergeben, \ home \ backups \ test anstelle von/home/backups/test. Es funktioniert jetzt gut. – Sharath

0

Kurz gesagt, dies kann nicht mit dem MongoDB-Treiber erreicht werden. Diese Befehle können nur über die Befehlszeile (d. H. MongoDB-Shell) aufgerufen werden. Möglicherweise müssen Sie das Datum als CSV exportieren und die Daten programmgesteuert in MongoDB importieren, was sehr langsam wäre.

Andernfalls müssen Sie den Befehl möglicherweise mit Groovy-Bibliotheken ausführen. Ähnlich wie der folgende Java-Befehl.

Runtime.getRuntime(). Exec ("mongoimport -d-h <> ..");

Similar question for Java Driver

+0

Wenn ich führe die obige Zeile aus meinem Skript aus, es heißt "Prozess beendet mit Exit-Code 0", aber ich sehe nicht, dass ant-Datenbank wiederhergestellt wird, während, wenn ich den folgenden Befehl von der Kommandozeile ausführen, "mongorestore/home/backups/test", Ich sehe die DB wiederhergestellt werden. – Sharath

+0

Ich schrieb Runtime.getRuntime(). Exec ("" "mongorestore $ dbBackUpPath" "") – Sharath

+0

Haben Sie versucht mit voller absoluter Pfad von mongorestore? – notionquest

Verwandte Themen