我可以在groovy文件中运行mongorestore命令吗?
我有一个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/
有没有什么办法可以做到这一点?
不知道这是你所需要的最有效的方式,但你可以调用命令,并等待其完成加给你的代码:
String command = "mongorestore ${System.properties['user.home']}/backups/first_backup"
Process p = command.execute()
p.waitFor()
总之,这不能通过使用MongoDB驱动来实现。这些命令只能从命令行(即MongoDB shell)调用。您可能需要将日期导出为CSV,并以编程方式将数据导入MongoDB,这会非常缓慢。
否则,您可能需要使用Groovy库执行命令。类似于下面的Java命令。
Runtime.getRuntime()。exec(“mongoimport -d -h <> ..”);
当我从我的脚本执行上面的行,它说“过程完成退出代码0”,但我没有看到蚂蚁数据库恢复,而当我从命令行运行以下命令,“mongorestore/home/backups/test”,我看到数据库正在恢复。 – Sharath
我写了Runtime.getRuntime()。exec(“”“mongorestore $ dbBackUpPath”“”) – Sharath
您是否尝试过使用完全绝对路径的mongorestore? – notionquest
我有下面的代码,String command =“”“mongorestore $ dbBackUpPath”“”Process p = command.execute(),basckup数据库没有创建,而当我在命令行运行下面的代码,mongorestore/home/backups /测试它运作良好。我看到测试数据库正在恢复。 – Sharath
你添加了'p.waitFor()'吗?您需要一些方法来等待该命令完成。为了调试,在'p = command.execute()'后面加上'println p.in.text + p.err.text',看看'mongorestore'输出的是什么。 –
我的错误是我错误地通过路径\ home \ backsups \ test而不是/ home/backups/test。现在它工作正常。 – Sharath