我正在使用MySql作为数据库开发Java应用程序。我必须定期从我的应用程序中转储MySql数据库(假设每天早上10点),我已经编写了一个批量(.bat)文件来转储数据库。批处理文件工作正常,但问题是它每次执行时都要求输入密码。
有没有办法在不提示密码的情况下转储MySql数据库并定期从Java应用程序实现它?
答案 0 :(得分:2)
您可以将密码放在命令行上,正如其他人所指出的那样。至于从Java运行它(虽然纯粹主义者可能会反对),你可以使用Runtime.exec()来调用你的mysql命令:http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html。
如果您是在Java应用程序中执行此操作,您可能还想考虑不仅仅是定期执行此操作。根据您的数据库使用情况(例如频繁读取,但不经常写入),您可能会发现只有在知道数据库已被更改或者沿着这些行更新时才能进行转储。
如果您确实想要定期转储数据库,那么最好只设置一个cron-job。以下是有关Windows的cron方法的关于SO的上一篇文章:What is the Windows version of cron?。
答案 1 :(得分:0)
答案 2 :(得分:0)
您没有告诉您实际上是如何转储数据库的,但我会假设您使用的是mysqldump。
您可以使用开关--password=...
在命令行上指定数据库密码。或者,如果您想要更安全,请在option file中使用密码。有关详细信息,请参阅man mysqldump
。
答案 3 :(得分: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”);
}