2010-06-11 64 views
4

我正在开发一个MySql作为数据库的Java应用程序。我必须定期从我的应用程序中转储MySql数据库(让我们每天早晨10点说),并且已经编写了用于转储数据库的批处理(.bat)文件。批处理文件工作正常,但问题是它在执行过程中每次都要求输入密码。从我的Java应用程序中取出MySql备份

有没有办法在不提示密码的情况下转储MySql数据库并定期从Java应用程序实现它?

回答

0

你不告诉你如何实际转储数据库,但我会假设你正在使用mysqldump

您可以使用交换机--password=...在命令行上指定数据库密码。或者,如果您想要更安全,请使用option file中的密码。有关更多信息,请参阅man mysqldump

+0

是的,我只用mysqldump。 – dhiraj 2010-06-11 09:20:54

1

正如其他人所指出的那样,您一定可以在命令行上输入密码。至于从Java运行它(尽管纯粹主义者可能会反对),你可以使用Runtime.exec()来调用你的mysql命令:http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html

如果你是从你的Java应用程序中完成它,你可能也想要考虑不是定期做它,但是。根据您的数据库使用情况(例如频繁读取,但不频繁的写入),您可能会发现,只有当您知道数据库已更改时才能进行转储,或者沿着这些线路进行转储。

如果你确实想周期性地转储数据库,那么你最好是设置一个cron-job。以下是SO关于Windows方法到cron的前一篇文章:What is the Windows version of cron?

+0

非常感谢您的回复。 mysqldump部分工作正常。我现在必须寻找周期性转储部分。是的,我只使用Runtime.exec()来达到这个目的。 – dhiraj 2010-06-11 12:38:54

0

备份:

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 
executeCmd = “mysqldump -u “+dbUser+” -p”+dbPass+” “+dbName+” -r backup.sql”; 
} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“Backup taken successfully”); 

} else { 

out.println(“Could not take mysql backup”); 

} 

还原:

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 

executeCmd = new String[]{“/bin/sh”, “-c”, “mysql -u” + dbUser+ ” -p”+dbPass+” ” + dbName+ ” < backup.sql” }; 

} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“success”); 

} else { 

out.println(“restore failure”); 

}