在ssh工具或CMD窗口中执行mysqldump执行备份都可以成功,但是放到java程序中使用Runtime确总是也不生效。
我的语句是这样的:
mysqldump --ignore-table=test.recovery -h127.0.0.1 -uroot -p123456 --add-locks --opt test >C:\\Users\\DELL\\Desktop\\testmysqldump\\test.sql
尝试过使用绝对路径如:
D:\\mysql\\mysql-5.7.7-rc-winx64\\bin\\mysqldmp windows
/usr/bin/mysqldump linux
这样的写法去调用依然不生效。最后在其它博客中看到使用 java Runtime去调用时 字符“>”要换成 -r
示例如下:
mysqldump --ignore-table=test.recovery -h127.0.0.1 -uroot -p123456 --add-locks --opt test
-r C:\\Users\\DELL\\Desktop\\testmysqldump\\test.sql
成功执行,解决问题。
再继续研究中发现关于大于号的问题其实还是权限的问题,在linux中可以使用下面的方式执行。
String aaa = "mysqldump --ignore-table=test.recovery -h127.0.0.1 -uroot -p123456 --add-locks --opt test>/opt/test.sql";
System.out.println("命令:");
System.out.println(aaa);
System.out.println("开始执行");
String[] commands = { "/bin/sh", "-c", aaa };
Runtime runtime = Runtime.getRuntime();
Process pro = runtime.exec(commands);
int status = pro.waitFor();
if (status != 0)
{
System.out.println("Failed to call shell's command ");
}
本地测试执行成功。