关于备份数据库操作的一些问题

目前在进行一些项目开发的时候遇到要对数据库进行备份与还原的操作。在进行操作的时候在对数据库进行备份时遇到一些问题,记录下来。
数据库的备份需要调用cmd命令,起初我们是这样设计的

    public void backup(String path) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    //-u后面是用户名,-p是密码-p后面最好不要有空格,-family是数据库的名字
    String cmd = "mysqldump  -u userName -ppassword --set-charset=UTF8 databaseName";
    Process process = runtime.exec(cmd);
    InputStream inputStream = process.getInputStream();//得到输入流,写成.sql文件
    InputStreamReader reader = new InputStreamReader(inputStream,"utf-8");
    BufferedReader br = new BufferedReader(reader);
    String s = null;
    StringBuffer sb = new StringBuffer();
    while((s = br.readLine()) != null){
        sb.append(s+"\r\n");
    }
    s = sb.toString();
    File file = new File(path);
    file.getParentFile().mkdirs();
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(s.getBytes());
    fileOutputStream.close();
    br.close();
    reader.close();
    inputStream.close();
}

利用以上方法测试时会报错但
mysqldump -u userName -ppassword –set-charset=UTF8 databaseName
该命令放cmd命令运行时若显示 无内部命令,说明mysql数据库在环境变量中未进行配置,我们需要在系统的环境变量中path下加入mysql在本机的路径 “ D:\network\phpStudy\MySQL\bin”
在加入这个之后在cmd中可以正常运行改命令对数据库进行备份。
但在java程序中运行仍会报错 Cannot run program “mysqldump”: CreateProcess error=2
还是会报mysqldump文件,具体原因暂时还不太明确,不过我们将以上命令改为
cmd /c mysqldump -u userName -ppassword –set-charset=UTF8 databaseName
之后命令就可以正常运行,不会报错了,同时数据库也备份成功

另附上还原数据库的操作:

public void recover(String path) throws IOException {
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("cmd /c mysql  -u userName  -p password  --default-character-set=utf8 lemon");
    OutputStream outputStream = process.getOutputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
    String str = null;
    StringBuffer sb = new StringBuffer();
    while((str = br.readLine()) != null){
        sb.append(str+"\r\n");
    }
    str = sb.toString();
    System.out.println(str);
    OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8");
    writer.write(str);
    writer.flush();
    outputStream.close();
    br.close();
    writer.close();

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值