最近在开发项目由于遇到了需要备份数据库的功能,因此在网上一顿搬砖,中间踩坑很多,特此记录,希望以后再有同样需求的能看到,不必再踩坑

 

首先第一步:应当打开系统环境变量path 查看,是否配置有MySQL命令的环境变量

mysql如何执行外部shell命令 mysql执行cmd命令_环境变量

以上的是我的环境,你们的安装目录到时候是哪个就配置哪个,要精确到bin目录下,否则没效果.

 

第二步:了解数据库备份命令在cmd中的写法 

1.正确的写法:  mysqldump  -u  root  -p123456  --databases beam  -r   D:\\data\\test2.sql

 2.错误的写法: mysqldump  -u  root  -p 123456  beam -r D:\\data\\test.sql

当我们使用错误写法在cmd中执行时我们会发现,cmd会让我们再输入一次密码,密码输入成功后,cmd就会报错了.信息如下:

  Got error: 1049: Unknown database '123456' when selecting the database 翻译后的内容就是在选择数据库时出现未知数据库'123456'. 所以这点要特别注意

 

第三步:了解了数据库备份命后,我们就应当要在代码中去实现了,其中的核心命令是:


Runtime.getRuntime().exec(cmd命令);


当我们了解了核心命令后,信心满满的去实现时,在实现过程中会遇到另外一个坑.要特别注意:

1.先看下我的如下代码:

mysql如何执行外部shell命令 mysql执行cmd命令_环境变量_02

这块代码就是将那个备份数据库的命令放在了核心语法中执行而已.当我们调用这个方法时我们会发现出现了一个意想不到的错误.

错误信息如下:

mysql如何执行外部shell命令 mysql执行cmd命令_java_03

说是找不到我们的文件,一看到这个我就知道,这不是很简单么,肯定是文件没创建呗,然后我就手动的创建了文件在磁盘上以后再次执行程序,发现还是这种错误.这时候我就对我的备份数据库命令产生了怀疑.于是乎,在控制台打印出来完整命令后,我把命令放在了cmd中执行,发现没有任何异常,数据库直接备份成功了 走到这里,我就有点迷茫了,命令没问题,文件也存在,但是就是报错.于是乎就开始了各种网上查询搜原因.直到看到了一篇博客,才恍然大悟,博客中的回复是:要执行的是cmd命令 不是mysqldump命令.于是对我的代码进行了修正,修正后如下:

mysql如何执行外部shell命令 mysql执行cmd命令_环境变量_04

没错,就是缺少了cmd 前缀,加上去这个之后再次执行请求,发现直接备份成功!

至此,本人踩得坑就说完了.希望大家来交流!