java - 坚持使用 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)”?
谢谢你的帮助!
解决方案
我想通了,只需使用
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();
我仍然不知道造成这种情况的确切原因,但它只是工作,我必须做进一步的工作。
推荐阅读
- node.js - npm 审计中等严重性漏洞
- python - 如何修复 discord.py 中 cogs 中的 no 'setup' 错误?
- javascript - 试图将上下文传递给我的 WordPress 块
- ios - 在 xCode 11 中接收 SQLite 错误代码 26?
- javascript - 条件是什么?Window.event : e 是什么意思?
- sympy - Sympy 无法解出我的方程式并卡住了
- ios - 即使我使用安装后脚本,依赖于 CocoaPod 的应用程序作为具有自己的依赖项的 xcframework 在启动时崩溃并出现 dyld 错误
- json - 计数雪花中的 JSON 列
- python - 使用 imageio 保存 3D 绘图
- css - 为什么 CSS 网格项中的嵌套元素不可滚动?