2016-08-11 143 views
0

我有一個Groovy腳本,刪除一個數據庫,並從現有的備份(SQL)恢復數據庫我可以在groovy文件中運行mongorestore命令嗎?

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實現這個功能。在Mongo中是否有相當於sql.execute()的地方,我可以在groovy文件中運行Mongo命令,如mongorestore

對於蒙戈我有以下代碼:

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」「」Process p = command.execute(),basckup數據庫沒有創建,而當我在命令行運行下面的代碼,mongorestore/home/backups /測試它運作良好。我看到測試數據庫正在恢復。 – Sharath

+0

你添加了'p.waitFor()'嗎?您需要一些方法來等待該命令完成。爲了調試,在'p = command.execute()'後面加上'println p.in.text + p.err.text',看看'mongorestore'輸出的是什麼。 –

+1

我的錯誤是我錯誤地通過路徑\ home \ backsups \ test而不是/ home/backups/test。現在它工作正常。 – Sharath

0

總之,這不能通過使用MongoDB驅動來實現。這些命令只能從命令行(即MongoDB shell)調用。您可能需要將日期導出爲CSV,並以編程方式將數據導入MongoDB,這會非常緩慢。

否則,您可能需要使用Groovy庫執行命令。類似於下面的Java命令。

Runtime.getRuntime()。exec(「mongoimport -d -h <> ..」);

Similar question for Java Driver

+0

當我從我的腳本執行上面的行,它說「過程完成退出代碼0」,但我沒有看到螞蟻數據庫恢復,而當我從命令行運行以下命令,「mongorestore/home/backups/test」,我看到數據庫正在恢復。 – Sharath

+0

我寫了Runtime.getRuntime()。exec(「」「mongorestore $ dbBackUpPath」「」) – Sharath

+0

您是否嘗試過使用完全絕對路徑的mongorestore? – notionquest

相關問題