2010-06-11 27 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」); 

}