0

我有一个 groovy 脚本,它删除一个数据库并从现有备份(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 中是否有等价物,我可以像在 groovy 文件中sql.execute()一样运行 Mongo 命令。mongorestore

对于 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/

有什么办法可以做到这一点?

4

2 回答 2

0

简而言之,这是使用 MongoDB 驱动程序无法实现的。这些命令只能从命令行(即 MongoDB shell)调用。您可能需要将日期导出为 CSV 并以编程方式将数据导入 MongoDB,这会非常慢。

否则,您可能需要使用 Groovy 库执行命令。类似于下面的 Java 命令。

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

Java驱动程序的类似问题

于 2016-08-11T15:30:00.510 回答
0

不确定这是完成您需要的最有效的方法,但您可以调用该命令并通过将其添加到您的代码来等待它完成:

String command = "mongorestore ${System.properties['user.home']}/backups/first_backup"
Process p = command.execute()
p.waitFor()
于 2016-08-12T03:25:54.430 回答