首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Java 執行 MySQL 匯入匯出:Runtime.exec 呼叫 mysqldump/mysql 指令

     編輯:MySQL 資料庫相關知識

核心程式碼

// 匯出
String dumpCmd = "mysqldump -uroot -proot --opt databasename > d:/test.sql";
Runtime.getRuntime().exec("cmd /c " + dumpCmd);

// 匯入 (先建庫)
String createDb = "mysqladmin -uroot -proot create databasename";
Runtime.getRuntime().exec("cmd /c " + createDb);

String importCmd = "mysql databasename < d:/test.sql";
Runtime.getRuntime().exec("cmd /c " + importCmd);

改良版:完整路徑、等待結束、錯誤處理

public static void execMySqlCmd(String cmd) throws IOException, InterruptedException {
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", cmd);
    pb.redirectErrorStream(true);
    Process p = pb.start();
    // 讀取輸出避免緩衝區阻塞
    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
        String line;
        while ((line = br.readLine()) != null) System.out.println(line);
    }
    int exitCode = p.waitFor();
    if (exitCode != 0) throw new RuntimeException("MySQL command failed: " + cmd + ", exit=" + exitCode);
}

// 使用
execMySqlCmd("\"C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe\" -uroot -proot --opt db > D:\\backup.sql");
execMySqlCmd("\"C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysql.exe\" -uroot -proot db < D:\\backup.sql");

注意事項

  • Windows 下需 `cmd /c` 執行重導向 (`>`, `<`);Linux 直接用 `bash -c`。
  • 路徑含空格必須雙引號包裹。
  • 生產環境建議改用 JDBC 批次寫入 或 MySQL 官方 Java 備份 API,避免外部進程依賴與安全風險。
  • 密碼明文出現在進程列表 (`ps -ef`) 有洩露風險,可用 `--defaults-extra-file` 指定密碼檔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved