首页 > 解决方案 > 坚持使用 java 运行时备份和恢复 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);

它正在工作

然后我尝试从这个 .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)”?

谢谢你的帮助!

标签: javamysql

解决方案


我想通了,只需使用

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();

我仍然不知道造成这种情况的确切原因,但它只是工作,我必须做进一步的工作。


推荐阅读