java 实现mysql的备份和恢复

刚开始的时候,在做项目的时候,我想用hibernate对数据库的备份,我不知道如何去使用,在网上也没有找到相关的资料,就想到用mysql原生 的语句去进行操作,利用java里面的Runtime执行应用程序,得到里面的输出流,从而写入一个文件中
代码如下:
只需要导入相应的包就可以,可以调用里面的方法![这里写图片描述]

public class MysqlUtils {

    /**
     * 数据库默认用户名
     */
    private static String username = "root";
    /**
     * 数据库默认密码
     */
    private static String password = "root";
    /**
     * 数据库默认主机地址
     */
    private static String host = "127.0.0.1";
    private static String database = "";

    public static void main(String[] args) throws IOException {

    }

    /**
     * 对数据库进行还原操作
     * 
     * @param path
     *            要还原的文件名,全路径
     * @param database
     *            所要还原的数据库
     * @throws IOException
     */
    public static void recover(String path, String database) throws IOException {
        recover(path, MysqlUtils.username, MysqlUtils.password,
                MysqlUtils.host, database);
    }

    /**
     * 对数据库进行还原操作
     * 
     * @param path
     *            要还原的文件名,全路径
     * @param username
     *            mysql的用户名
     * @param password
     *            mysql的密码
     * @param database
     *            要还原的数据库
     * @throws IOException
     */
    public static void recover(String path, String username, String password,
            String database) throws IOException {
        recover(path, username, password, MysqlUtils.host, database);
    }

    /**
     * 对数据库进行还原操作
     * 
     * @param path
     *            要还原的文件名,全路径
     * @param username
     *            mysql的用户名
     * @param password
     *            mysql的密码
     * @param host
     *            所要连接的主机
     * @param database
     *            所要还原的数据库
     * @throws IOException
     */
    public static void recover(String path, String username, String password,
            String host, String database) throws IOException {
        Runtime runtime = Runtime.getRuntime();

        if (username != null) {
            MysqlUtils.username = username;

        }
        if (password != null) {
            MysqlUtils.password = password;

        }
        if (host != null) {
            MysqlUtils.host = host;

        }
        if (database != null) {
            MysqlUtils.database = database;
        }
        String recoversql = "mysql -u" + MysqlUtils.username + " -p"
                + MysqlUtils.password + " -h" + MysqlUtils.host
                + " --default-character-set=utf8 " + MysqlUtils.database;
        System.out.println(recoversql);
        // "mysql -uroot -proot --default-character-set=utf8 jingsai"
        Process process = runtime.exec(recoversql);
        OutputStream outputStream = process.getOutputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream(path)));
        String str = null;
        StringBuffer sb = new StringBuffer();
        while ((str = br.readLine()) != null) {
            sb.append(str + "\r\n");
        }
        str = sb.toString();
        System.out.println(str);
        OutputStreamWriter writer = new OutputStreamWriter(outputStream,
                "utf-8");
        writer.write(str);
        writer.flush();
        outputStream.close();
        br.close();
        writer.close();
    }

    /**
     * 对mysql数据库进行备份 默认的用户名和密码 root 主机是本机地址
     * 
     * @param path
     *            备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
     * @param database
     *            所要备份的数据库的名字
     * @throws IOException
     */
    public static void backup(String path, String database) throws IOException {
        backup(path, null, null, database, null);
    }

    /**
     * 对mysql数据库进行备份 默认 主机是本机地址
     * 
     * @param path
     *            备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
     * @param username
     *            Mysql的用户名
     * @param password
     *            mysql的密码
     * @param database
     *            所要备份的数据库的名字
     * @throws IOException
     */
    public static void backup(String path, String username, String password,
            String database) throws IOException {
        backup(path, username, password, null, database);
    }

    /**
     * 对mysql数据库进行备份
     * 
     * @param path
     *            备份文件所保存的路径 要包括文件名 是以 保存文件的格式是 sql文件 以<code>.sql</code>结尾
     * @param username
     *            Mysql的用户名
     * @param password
     *            mysql的密码
     * @param database
     *            所要备份的数据库的名字
     * @param host
     *            所要连接的主机地址
     * @throws IOException
     */
    public static void backup(String path, String username, String password,
            String database, String host) throws IOException {
        if (username != null) {
            MysqlUtils.username = username;

        }
        if (password != null) {
            MysqlUtils.password = password;

        }
        if (host != null) {
            MysqlUtils.host = host;

        }
        if (database != null) {
            MysqlUtils.database = database;
        }

        // -u后面是用户名,-p是密码-p后面最好不要有空格,-jingsai是数据库的名字 -h 是要连接的主机的地址
        String backupsql = "mysqldump -u" + MysqlUtils.username + " -p"
                + MysqlUtils.password + " -h" + MysqlUtils.host + " "
                + MysqlUtils.database;

        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(backupsql);
        InputStream inputStream = process.getInputStream();// 得到输入流,写成.sql文件
        InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
        BufferedReader br = new BufferedReader(reader);
        String s = null;
        StringBuffer sb = new StringBuffer();
        while ((s = br.readLine()) != null) {
            sb.append(s + "\r\n");
        }
        s = sb.toString();
        File file = new File(path);
        file.getParentFile().mkdirs();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        fileOutputStream.write(s.getBytes());
        fileOutputStream.close();
        br.close();
        reader.close();
        inputStream.close();

    }
}

这个是我个人的经历与总结。不喜勿喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值