使用java从批处理文件备份/恢复mongoDB?
下面是我执行批处理文件以恢复mongo数据库的java代码。这需要花费很长时间(持续运行25分钟,但尚未停止)。当我只恢复单个集合时,它就可以正常工作。问题是当我恢复完整的数据库时 先谢谢你使用java从批处理文件备份/恢复mongoDB?,java,mongodb,batch-file,Java,Mongodb,Batch File,下面是我执行批处理文件以恢复mongo数据库的java代码。这需要花费很长时间(持续运行25分钟,但尚未停止)。当我只恢复单个集合时,它就可以正常工作。问题是当我恢复完整的数据库时 先谢谢你 Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath)); try (final BufferedReader b = new BufferedReader(new InputS
Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath));
try (final BufferedReader b = new BufferedReader(new InputStreamReader(pDb.getInputStream()))) {
String line;
while ((line = b.readLine()) != null) {
System.out.println(line);
}
}
log.info("waiting for restore complete database...");
int exitVal = pDb.waitFor();
log.info("Process exitValue: " + exitVal);
这是我的restore_db.bat批处理文件代码
@echo off
REM move into the backups directory
CD C:\project\backup
REM restore the database
echo Running restore complete database
mongorestore --db dbName dump/app
echo RESTORE COMPLETE
读完这篇文章后,我设法解决了我的问题。我将java代码更改为
Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath));
InputStream stderr = pDb.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
try (final BufferedReader b = new BufferedReader(isr)) {
String line;
while ((line = b.readLine()) != null) {
System.out.println(line);
}
}
log.info("waiting for restore complete database...");
exitVal = pDb.waitFor();
log.info("Process exitValue: " + exitVal);
然后我得到了挂起过程的实际原因。我在java控制台中遇到以下错误:E11000重复键错误索引。在批处理文件中,我正在恢复同一个数据库。当我在批处理文件中更改数据库的名称时,数据库将立即恢复。
i、 e
改为
mongorestore --db dbName2 dump/app
然后恢复名为dbName2的新数据库。当您手动恢复时,需要多长时间才能完成?需要1秒或2秒。好的,谢谢您的回答-您是否只运行了批处理文件?需要多长时间?是的,我运行批处理文件。批处理文件在此行中花费时间。mongorestore--db数据库名转储/应用程序
mongorestore --db dbName2 dump/app