簡體   English   中英

堅持使用 java 運行時備份和恢復 mysql

[英]Stuck on using java runtime backup and restore mysql

我正在使用 java RunTime 執行 mysql 命令來備份和恢復數據庫,但它無法正常工作。

我的環境:Mac OS Big Sur,arm64,Java 8

起初,我使用

String command = "mysqldump -uxxx -pxxx myDataBase > /myFolder/backup.sql"
Runtime.getRuntime().exec(Command);

嘗試備份數據庫,但命令中的“>”似乎有問題

所以我改為

String command = "mysqldump -uxxx -pxxx myDataBase -r /myFolder/backup.sql"
Runtime.getRuntime().exec(Command);

它正在工作

然后我嘗試從 this.sql 文件中恢復

String command = "mysql -uxxx -pxxx -r myDataBase < /myFolder/backup.sql"
Runtime.getRuntime().exec(Command);

沒有錯誤報告,但它沒有恢復數據庫。 我在終端中運行這個命令,它只是工作。

我認為這可能是“<”問題,所以我將代碼更改為

String[] command = {"/bin/bash", "-c" , "mysql -uxxx -pxxx -r myDataBase < /myFolder/backup.sql"}
Runtime.getRuntime().exec(Command);

盡管如此,沒有錯誤但不起作用,我嘗試在終端中運行此命令,但出現錯誤:

/bin/bash -c /opt/homebrew/opt/mysql@5.7/bin/mysql -uxxx -pxxx
ERROR 1045 (28000): Access denied for user 'xxxxx'@'localhost' (using password: NO)

現在我完全糊塗了,為什么我在使用“-pxxx”時得到“(使用密碼:NO)”?

謝謝你的幫助!

我想通了,只需使用

ProcessBuilder pb=new ProcessBuilder("/bin/zsh","-c","mysql -uxxx -pxxx -r -vvv myDataBase < xxxx/backup.sql");
pb.redirectOutput(new File("xxxx/log.txt"));
Process p = pb.start();

我仍然不知道造成這種情況的確切原因,但它只是工作,我必須做進一步的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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