当前位置: 代码网 > it编程>编程语言>Java > Java实现mysql数据库的自动备份和自动还原

Java实现mysql数据库的自动备份和自动还原

2024年11月04日 Java 我要评论
在介绍前我要说一下,网上的例子不少,但是坑很多,有些代码看起来是对的,但是小问题不少,原因在于楼主没有测试过,或者没有交代使用时的特殊环境。以下代码都是亲身测试过的。1.项目背景:使用java实现远程

在介绍前我要说一下,网上的例子不少,但是坑很多,有些代码看起来是对的,但是小问题不少,原因在于楼主没有测试过,或者没有交代使用时的特殊环境。以下代码都是亲身测试过的。

1.项目背景:使用java实现远程备份mysql数据库到本地电脑,并可以将本地数据库的备份还原到远程mysql数据库。本机环境windows。

2.注意:本机必须已经装了mysql数据库,并且将mysql 的bin加在了系统环境变量中。我的mysql在c盘,以下代码也是以c盘的mysql的bin下运行的。具体要以你实际安装mysql的位置而定,不然就会自己坑自己了。

3.代码逻辑:很重要!!!

4.我们首先(在远程数据库)创建一个有测试数据的库:robot,一个空的数据库(没表,没数据)robot-test。

5.我们第一步将robot数据库备份到本地电脑d:\test,名字命名:robot-test.sql。

6.查看本地电脑的d:\test\robot-test.sql是否存在,并确定是否备份成功。

7.第二步,将robot-test.sql还原到之前创建的空数据库:robot-test。

8.查看robot-test数据库的表和数据是否还原成功。

备份和还原方法写到一个类中:

package com.company;
import java.io.file;
import java.io.ioexception;

public class databasedumporbackrout {
    /**
     * @param hostip ip地址,可以是本机也可以是远程
     * @param username 数据库的用户名
     * @param password 数据库的密码
     * @param savepath 备份的路径
     * @param filename 备份的文件名
     * @param databasename 需要备份的数据库的名称
     * @return
     */
    public static boolean backup(string hostip, string username, string password, string savepath, string filename,
                                 string databasename) {
        filename +=".sql";
        file savefile = new file(savepath);

        if (!savefile.exists()) {// 如果目录不存在
            savefile.mkdirs();// 创建文件夹
        }
        if (!savepath.endswith(file.separator)) {
            savepath = savepath + file.separator;
        }

        
        //拼接命令行的命令
        stringbuilder stringbuilder = new stringbuilder();
        stringbuilder.append("c:\\program files\\mysql\\mysql server 8.0\\bin\\mysqldump --opt -h ").append(hostip);
        stringbuilder.append(" --user=").append(username).append(" --password=").append(password)
                .append(" --lock-all-tables=true");
        stringbuilder.append(" --result-file=").append(savepath + filename).append(" --default-character-set=utf8 ")
                .append(databasename);
        system.out.println(stringbuilder.tostring());
        try {
            //调用外部执行exe文件的javaapi
            process process = runtime.getruntime().exec(stringbuilder.tostring());
            
            if (process.waitfor() == 0) {// 0 表示线程正常终止。
                return true;
            }
        } catch (ioexception e) {
            e.printstacktrace();
        } catch (interruptedexception e) {
            e.printstacktrace();
        }
        return false;
    }


    /**
     * @param filepath 数据库备份的脚本路径
     * @param ip ip地址
     * @param database 数据库名称
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public static boolean recover(string filepath,string ip,string database, string username,string password) {


        string stmt1 = "c:\\program files\\mysql\\mysql server 8.0\\bin\\mysqladmin -h "+ip+" -u"+username+" -p"+password+" create database if not exists "+database;

        string stmt2 = "mysql -h "+ip+" -u"+username+" -p"+password+" "+database+" < " + filepath;

        string[] cmd = { "cmd", "/c", stmt2 };

        try {
         system.out.println(stmt1);
            runtime.getruntime().exec(stmt1);
            system.out.println(cmd);
            runtime.getruntime().exec(cmd);
            system.out.println("数据已从 " + filepath + " 导入到数据库中");
        } catch (ioexception e) {
            e.printstacktrace();
            return false;
        }
        return true;
    }

}

备份的main方法

package com.company;
/**
 * 
 * @author zndume
 * 数据库备份主方法测试
 *
 */
public class buckupmain {

    public static void main(string[] args) {
        string hostip = "172.17.7.60";
        string username = "root";
        string password = "zndume";
        string savepath = "d:\\test";
        string filename = "robot-test";
        string databasename = "robot";
        boolean backup = databasedumporbackrout.backup(hostip, username, password, savepath, filename, databasename);
        system.out.println(backup);
        
    }
}

还原的main方法

package com.company;

public class recovermain {
 
 public static void main(string[] args) {
   string ip = "172.17.7.60";
      string username = "root";
      string password = "zndume";
      string savepath = "d:\\test\\robot-test.sql";
      string databasename = "robot-test";
      boolean recover = databasedumporbackrout.recover(savepath, ip, databasename, username, password);
      system.out.println(recover);
 }
 
}

以上就是java实现mysql数据库的自动备份和自动还原的详细内容,更多关于java mysql自动备份和自动还原的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com