使用mysqldump命令保存数据库文件(深坑)

在使用mysqldump命令配合Java执行保存数据库文件时,遇到错误提示'could’t find table xxx',原因是路径中包含空格且未用双引号包裹,导致命令解析错误。解决方法是在包含空格的路径前后添加双引号,从而确保命令正确执行。
最近在使用java保存数据库文件时,遇到一个问题;这里先上代码:
new Thread(new Runnable() {		
		@Override
		public void run() {
			try {
				String sFilepath=GConst.getSysEnv("EV_INSTALL_PATH")+"/Utilities/mysql/historySql_"+sPort;
				GConst.mkdir(sFilepath);
				String sFileName = sPort+"-"+new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date().getTime())+"_sql.sql";
				File file = new File(sFilepath+"/"+sFileName);
				file.createNewFile();
				String msMysqlDump = "mysqldump -uevaadmin -p'evaDKS579<>?' evcfgdb"+sPort+" > "+sFilepath+"/"+sFileName+"";
				Process process = Runtime.getRuntime().exec(msMysqlDump);
				process.waitFor();
				process.destroy();
			} catch (IOException e) {
				Database.LOG.error("CommonService:setBkndCfg()"+e.getMessage());
			} catch (InterruptedException e) {
				Database.LOG.error("CommonService:setBkndCfg()"+e.getMessage());
			}
		}
	}).start();

可以看到这里我新开一个线程,拼接一个路径去保存数据库文件;当然不必对路径常量进行关注。主要是mysqldump命令那句话,我使用命令加上了用户名,密码和数据库,后面也跟上要保存的路径了;但是执行的时候却总是提示could’t find table xxx;老是说找不到这个表,这里这个xxx就是我的路径它截取了一部分;而process.waitFor()的返回值也是1,其实返回值是0的时候代表执行成功。在这里纠结了半天不知道为啥报错,后来发现这种cmd命令,如果自己的目录里带有空格的话,路径必须要用双引号包起来,加了双引号之后ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值