簡體   English   中英

備份mysql數據庫的java代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM