Java代码如何备份Mysql数据库及还原mysql数据库呢?

戚薇 Java经验 发布时间:2023-06-19 21:16:31 阅读数:2322 1
下文笔者讲述java代码备份mysql和还原mysql的方法及示例分享,如下所示
阅读完这篇文章之后,你将掌握“Java备份mysql数据库”、“Java还原mysql数据库”的方法技巧
借助java运行linux shell命令
    使用Runtime.getRuntime运行命令即可达到备份数据库和还原数据库的效果
例:编写mysql数据库操作工具类及使用示例
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="123456";//密码
        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();
        }
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202306/16871806386841.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者