[英]backup mysql database java code
我嘗試運行以下代碼來創建數據庫備份,但它顯示了一些運行時錯誤。
但是,我嘗試在mysql shell中運行System.out.println()輸出部分(在給定的代碼中已對此進行了注釋) ,並且它可以正常工作 。
它顯示io文件問題。 請有人幫助我。
package files;
public class tableBackup_1 {
public boolean tbBackup(String dbName,String dbUserName, String dbPassword, String path) {
String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path;
Process runtimeProcess;
try
{
System.out.println(executeCmd);//this out put works in mysql shell
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0)
{
System.out.println("Backup created successfully");
return true;
}
else
{
System.out.println("Could not create the backup");
}
} catch (Exception ex)
{
ex.printStackTrace();
}
return false;
}
public static void main(String[] args){
tableBackup_1 bb = new tableBackup_1();
bb.tbBackup("test","harin","1234","C:/Users/Master/Downloads/123.sql");
}
}
mysqldump -u harin -p1234 --add-drop-database -B test -r C:/Users/Master/Downloads/123.sql
java.io.IOException: Cannot run program "mysqldump": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at files.tableBackup_1.tbBackup(tableBackup_1.java:12)
at files.tableBackup_1.main(tableBackup_1.java:34)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 5 more
請檢查您的Global PATH環境變量是否其中包含<MySQL的路徑> \\ bin(執行echo %PATH%
並查看)。 有效地,您應該能夠在Plain DOS提示符下鍵入System.out.println()內容,並且應該能夠運行它。
即使無法解決問題,也請嘗試將代碼更改為如下所示執行
runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd });
理想情況下,這應該可以解決該問題。
更新:
如果您不在PATH環境變量中,請將代碼更改為以下內容
String executeCmd = "<Path to MySQL>/bin/mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path;
runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd });
我嘗試了這個,但是沒有用,所以我換成了
this runtimeProcess = Runtime.getRuntime().exec(executeCmd);
而且有效
我通過給出mysqldump.exe的完整路徑解決了這個問題
您可以通過以下方式獲取SO環境變量
Map<String, String> env = System.getenv();
final String LOCATION = env.get("MYSQLDUMP");
我像這樣設置系統變量:
MYSQLDUMP
D:\\xampp\\mysql\\bin\\mysqldump.exe
現在只需執行以下代碼,
String executeCmd = LOCATION+" -u " + DBUSER + " --add-drop-database -B " + DBNAME + " -r " + PATH + ""+FILENAME
Process runtimeProcess = = Runtime.getRuntime().exec(executeCmd);
注意:如果您尚未為mysql服務器配置密碼,只需從代碼中刪除-p PASSWORD
屬性即可。 並且不要忘記在創建新的系統變量后重新啟動計算機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.