2016-08-11 3 views
0

У меня есть заводной скрипт, который падает на БД и восстанавливает БД из существующей резервной копии (SQL)Могу ли я запустить команду mongorestore внутри файла groovy?

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

Я прошел все необходимые параметры и побежал sql.execute(), как показано ниже,

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


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

Все выше код работает отлично. Мне также нужно реализовать это для MongoDB. Есть ли эквивалент sql.execute() в Mongo, где я могу запустить команду Mongo как mongorestore в groovy файле.

Для Монго я следующий код:

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() 

Теперь мне нужно запустить/включать следующую команду внутри моего заводной файла, mongorestore ~/backups/first_backup/

Есть ли способ, я могу добиться этого?

ответ

0

Не уверен, что это самый эффективный способ сделать то, что вам нужно, но вы можете вызвать эту команду и ждать его, чтобы закончить, добавив в свой код:

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

У меня есть код ниже, String command = "" "mongorestore $ dbBackUpPath" "" Процесс p = command.execute(), basckup db не создается, тогда как при запуске кода ниже в командной строке mongorestore/home/backups/test работает хорошо. Я вижу, что тестовый db восстанавливается. – Sharath

+0

Вы добавили 'p.waitFor()'? Вам нужно каким-то образом дождаться завершения этой команды. Чтобы отладить, добавьте 'println p.in.text + p.err.text' после' p = command.execute() 'и посмотрите, что распечатает' mongorestore'. –

+1

Плохо, что я ошибался, \ home \ backsups \ test вместо/home/backups/test. Теперь он отлично работает. – Sharath

0

Короче говоря, этого не может быть достигнуто с помощью драйвера MongoDB. Эти команды можно вызывать только из командной строки (т. Е. Оболочки MongoDB). Вам может потребоваться экспортировать дату в формате CSV и программно импортировать данные в MongoDB, что будет очень медленным.

В противном случае вам может потребоваться выполнить команду с использованием Groovy libs. Подобно приведенной ниже команде Java.

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

Similar question for Java Driver

+0

Когда я выполните вышеприведенную строку из моего сценария, он говорит: «Процесс завершен с кодом завершения 0», но я не вижу восстановления базы данных ant, тогда как при запуске следующей команды из командной строки «mongorestore/home/backups/test», Я вижу, что db восстанавливается. – Sharath

+0

Я написал Runtime.getRuntime(). Exec ("" "mongorestore $ dbBackUpPath" "") – Sharath

+0

Вы пробовали с полным абсолютным путем mongorestore? – notionquest