为了账号安全,请及时绑定邮箱和手机立即绑定

关于数据库备份时遇到的问题

标签:
Java

目前在进行一些项目开发的时候遇到要对数据库进行备份与还原的操作。在进行操作的时候在对数据库进行备份时遇到一些问题,记录下来。
数据库的备份需要调用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();

}
点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
10
获赞与收藏
66

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消