我有一个groovy脚本,它删除了一个db并从现有备份恢复数据库(SQL)
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文件中运行像mongorestore
这样的Mongo命令。
对于Mongo,我有以下代码:
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()
现在我需要在我的groovy文件中运行/包含以下命令,
mongorestore ~/backups/first_backup/
有什么方法可以实现这个目标吗?
答案 0 :(得分:0)
简而言之,使用MongoDB驱动程序无法实现这一点。这些命令只能从命令行(即MongoDB shell)调用。您可能需要将日期导出为CSV并以编程方式将数据导入MongoDB,这将非常慢。
否则,您可能需要使用Groovy libs执行该命令。与下面的Java命令类似。
Runtime.getRuntime()。exec(“mongoimport -d -h<> ..”);
答案 1 :(得分:0)
不确定这是执行所需操作的最有效方法,但您可以通过将此命令添加到代码中来调用该命令并等待它完成:
String command = "mongorestore ${System.properties['user.home']}/backups/first_backup"
Process p = command.execute()
p.waitFor()