窗口中可以正常执行mysqldump 但java Runtime执行确未生效。

博客讲述了在Java程序中使用Runtime执行mysqldump命令备份MySQL数据库时遇到的问题,主要涉及到命令行参数的转义及权限问题。通过将'>'替换为'-r'解决了Windows下的问题,并提供了在Linux环境下处理权限问题的方法,最终成功在Java中执行mysqldump备份。
摘要由CSDN通过智能技术生成

在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 ");
            }

本地测试执行成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值