首页 > 数据库 >通过Java代码备份Mysql数据库

通过Java代码备份Mysql数据库

时间:2023-05-25 14:32:34浏览次数:45  
标签:Java String process 备份 sql System Mysql println out

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();
        }
    }
}


标签:Java,String,process,备份,sql,System,Mysql,println,out
From: https://blog.51cto.com/u_16085354/6347451

相关文章

  • java 获取数组,最大值,最小值
    以下实例演示了如何通过Collections类的Collections.max()和Collections.min()方法来查找数组中的最大和最小值:importjava.util.Arrays;importjava.util.Collections;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){Integer[]......
  • 如何用GPT开发后端java接口
     需求如图:一个特别小的项目,时间也很紧,就是要做到excel数据上传,然后根据每天上传的数据来生成折线图和统计表,并供大屏展示第一步:把表结构和逻辑描述给第二步得到代码:    第三部:粘贴跑通,一个接口花费约几分钟。。有个问题是这次我为了写博客重新提问得到的接口代......
  • Java笔记(八):单例模式
    懒汉式懒汉式单例模式在第一次调用的时候进行实例化。1.适用于单线程环境(不推荐)此方式在单线程的时候工作正常,但在多线程的情况下就有问题了。如果两个线程同时运行到判断instance是否为null的if语句,并且instance的确没有被创建时,那么两个线程都会创建一个实例,此时类型Singlet......
  • 碎片化学习前端之JavaScript(for...in 和 Object.keys() 的区别)
    前言JavaScript中遍历对象的方式主要有:for...in和Object.keys()两种方式。for...inletobj={name:'ming',age:18,}obj[Symbol('hello')]='world'obj.__proto__={gender:'man',job:'font-end'}f......
  • Mysql:低版本的mysql,5.7-,不知道root密码,如何控制(增、删、改、查)mysql.user:变相跳过mysq
    可以通过直接在mysqld的服务器上,通过os层的文件操作+为mysqld进程发送sighup(-1)信号实现。原理:低版本的mysql,5.7-,其用户账号是通过mysql系统库下的user系统表来控制的;而,mysql.user表是myisam引擎表;所以,我们只要将user.frm\user.MYD\user.MYI这3个相关数据表文件,在o......
  • 关于MYSQL连接后关闭连接问题
    因为创建连接并注册驱动时可能会错先错误,但是链接还是会进行创建 ,如果不判断连接Connection为不为空就关闭的话会引起空指针异常,同理ResultSet、PreparedStatement也是如此。创建顺序是从Connection->Preparedstatment->ResultSet,关闭顺序则是从ResultSet->Preparedstat......
  • docker启动mysql失败
    root@ecs-kc1-small-1-linux:~#dockerrun-p3306:3306mysql:8-oracle2022-03-0513:40:49+00:00[Note][Entrypoint]:EntrypointscriptforMySQLServer8.0.28-1.el8started.2022-03-0513:40:50+00:00[Note][Entrypoint]:Switchingtodedicateduser'mys......
  • Java序列化和反序列化
    序列化和反序列化的定义*Java序列化就是指把Java对象转换为字节序列的过程*Java反序列化就是指把字节序列恢复为Java对象的过程。 以下是我们常见的一行代码:privatestaticfinallongserialVersionUID=1L;关于这行代码,这是java源码中的一段话:如果可序列化类没有显......
  • docker导出mysql软件包
      查看镜像:dockerimages 导出镜像:dockersave05db07cd74c0>E:\mysql.tar 导入镜像:在新电脑上执行命令:dockerload-iC:\Docker\redis.tarC:\Docker\redis.tar为压缩文件路径,此时需要一定时间等待导入完成。dockerload-iC:\Docker\rabbitmq.tardockerloa......
  • 归并排序Java版(图文并茂思路分析)
    归并排序工作原理:工作原理是将一个大问题分解成小问题,再将小问题分解成更小的。(乍一看就觉得是像一个递归)就像下图这样。然后不断的将其一份为二,分解成更小的排序。我们设一个函数叫MergeSort(arr,l,r)意思就是将arr数组下标为[l,r]之间的数进行排序。那么就开始不断的调用自......