0
点赞
收藏
分享

微信扫一扫

通过Java代码备份Mysql数据库

Main

public class Main {
    public static void main(String[] args) {
        //备份数据库
        BakDb.bakDB();
        //获取本地备份的sql文件
        List<String> names  = Unitls.sqlFileNameByLocal();
        //获取最后一个文件名
        String name = names.get(names.size()-1);
        System.out.println(name);
        //恢复数据库
        RestoreDB.restoreDB(name);
    }
}

Unitls

public class Unitls {
    //设置sql文件的名字
    public static String sqlFileNameByDate(){
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        String dateStr = format.format(date);
        return dateStr;
    }
    //获取本地sql文件的名字
    public static List<String> sqlFileNameByLocal(){
        String path="d:/";
        File file = new File(path);
        String[] array = file.list();
        List<String> list = Arrays.asList(array);
        List<String> nameList = new ArrayList<>();
        //list=list.stream().filter(item->item.endsWith(".sql")).sorted().collect(Collectors.toList());
        for (String s : list) {
            if (s.endsWith("sql")){
                nameList.add(s.replace(".sql",""));
            }
        }
        return nameList;
    }
}

BakDb备份数据库


public class BakDb {
    public static void bakDB(){
        //设置sql文件的名字
        String sqlName = Unitls.sqlFileNameByDate();
        //设置参数
        String dbIp="127.0.0.1";
        String username="root";//用户名
        String password="1234";//密码
        String dbName="db1";//数据库
        String path="d:/";

        //备份数据库
        Runtime run = Runtime.getRuntime();
        try {
            Process process = run.exec("cmd /c mysqldump -h"+dbIp+" -u"+username+" -p"+password+" --default-character-set=UTF8 --single-transaction "+dbName+" > "+path+sqlName+".sql");

            process.waitFor(); //执行完成后进行下一步操作
            int i = process.exitValue();

            System.out.println(i);
            if (i==0){
                System.out.println("成功");
            }else {
                System.out.println("失败");
                //删除刚刚最后备份的文件
            }
            //打印错误流
            InputStream errorStream = process.getErrorStream();
            InputStreamReader isr = new InputStreamReader(errorStream,"gbk");
            BufferedReader br = new BufferedReader(isr);
            while (br.readLine() != null) {
                System.out.println(br.readLine());
            }
            process.destroy(); //杀死进程
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RestoreDB恢复数据库

public class RestoreDB {
    public static void restoreDB(String sqlName){
        //设置参数
        String dbIp="127.0.0.1";
        String username="root";//用户名
        String password="1234";//密码
        String dbName="db1";//数据库
        String path="d:/";//本地保存的路径
        //恢复数据库
        Runtime run = Runtime.getRuntime();
        try {
            Process process = run.exec("cmd /c mysql -h"+dbIp+" -u"+username+" -p"+password+" --default-character-set=utf8 "+dbName+" < "+path+sqlName+".sql");

            process.waitFor(); //执行完成后进行下一步操作
            int i = process.exitValue();
            System.out.println(i);
            if (i==0){
                System.out.println("成功");
            }else {
                System.out.println("失败");
                //重新恢复 或联系管理员
            }
            //打印错误
            InputStream errorStream = process.getErrorStream();
            InputStreamReader isr = new InputStreamReader(errorStream,"gbk");
            BufferedReader br = new BufferedReader(isr);
            while (br.readLine() != null) {
                System.out.println(br.readLine());
            }
            process.destroy(); //杀死进程
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


举报

相关推荐

0 条评论