java后台实现数据库备份还原

命令行执行
进入C:\Program Files\MySQL\MySQL Server 5.5\bin 目录

bin 路径下 输入cmd 直接执行 不必进入mysql 黑窗口

系统变量 添加 mysql路径(要不写入空白文件) 话不多说 源码
在这里插入图片描述
package com.sansec.cryptography;

import java.io.*;

public class test {
//本实例支持Linux环境和Windows环境
public static void main(String[] args) throws Exception {
//测试备份
/* String command1 = “mysqldump -hlocalhost -uroot -proot bdqn”;//参数依次是IP、账号、密码、数据库名
String savePath1 = “D:/demo.sql”;
boolean b1 = new test().backup(command1, savePath1);
if(b1){
System.out.println(“备份成功”);
}else {
System.out.println(“备份失败”);
}*/

    //测试还原
    String command2 = "mysql -hlocalhost -uroot -proot --default-character-set=utf8 bdqn";
    String savePath2 = "D:/demo.sql";
    boolean b2 = new test().recover(command2, savePath2);
    if(b2){
        System.out.println("还原成功");
    }else {
        System.out.println("还原失败");
    }
}

/**
 * mysql的备份方法
 *
 * @param command  命令行
 * @param savePath 备份路径
 * @return
 */
public boolean backup(String command, String savePath) {
    boolean flag;
    // 获得与当前应用程序关联的Runtime对象
    Runtime r = Runtime.getRuntime();
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
        // 在单独的进程中执行指定的字符串命令
        Process p = r.exec(command);
        // 获得连接到进程正常输出的输入流,该输入流从该Process对象表示的进程的标准输出中获取数据
        InputStream is = p.getInputStream();
        // InputStreamReader是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符
        InputStreamReader isr = new InputStreamReader(is, "utf-8");
        //BufferedReader从字符输入流读取文本,缓冲字符,提供字符,数组和行的高效读取
        br = new BufferedReader(isr);
        String s;
        StringBuffer sb = new StringBuffer("");
        // 组装字符串
        while ((s = br.readLine()) != null) {
            sb.append(s + System.lineSeparator());
        }
        s = sb.toString();
        // 创建文件输出流
        FileOutputStream fos = new FileOutputStream(savePath);
        // OutputStreamWriter是从字符流到字节流的桥梁,它使用指定的charset将写入的字符编码为字节
        OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
        // BufferedWriter将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入
        bw = new BufferedWriter(osw);
        bw.write(s);
        bw.flush();
        flag = true;
    } catch (IOException e) {
        flag = false;
        e.printStackTrace();
    } finally {
        //由于输入输出流使用的是装饰器模式,所以在关闭流时只需要调用外层装饰类的close()方法即可,
        //它会自动调用内层流的close()方法
        try {
            if (null != bw) {
                bw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            if (null != br) {
                br.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return flag;
}

/**
 * mysql的还原方法
 *
 * @param command  命令行
 * @param savePath 还原路径
 * @return
 */
public boolean recover(String command, String savePath) {
    boolean flag;
    Runtime r = Runtime.getRuntime();
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
        Process p = r.exec(command);
        OutputStream os = p.getOutputStream();
        FileInputStream fis = new FileInputStream(savePath);
        InputStreamReader isr = new InputStreamReader(fis, "utf-8");
        br = new BufferedReader(isr);
        String s;
        StringBuffer sb = new StringBuffer("");
        while ((s = br.readLine()) != null) {
            sb.append(s + System.lineSeparator());
        }
        s = sb.toString();
        OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
        bw = new BufferedWriter(osw);
        bw.write(s);
        bw.flush();
        flag = true;
    } catch (IOException e) {
        flag = false;
        e.printStackTrace();
    } finally {
        try {
            if (null != bw) {
                bw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            if (null != br) {
                br.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return flag;
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值