使用java控制mysql数据库的备份以及还原

原理:本方法主要是使用cmd执行mysqldump这个转储数据库程序,当然有很多工具可以利用,这个只是最基础的方法

备份

备份所使用的主要是

eg:mysqldump -hhostname -uusername -ppassword databasename >db.sql 

这个mysql语句,就能完全实现文件的备份.
具体在代码中体现:

/**
     * 备份mysql数据库
     * 
     * @param root
     *            mysql登录名
     * @param rootPass
     *            登录密码
     * @param dbName
     *            要备份的数据库名称
     * @param backupsPath
     *            备份的路径
     * @param backupsSqlFileName
     *            备份文件的名字
     * @return 
         * @param tableName   这里实现了只备份某一张表或多张表
         *这里使用了不确定参数
*备份mysql数据库的命令 mysqldump -hhostname -uusername -ppassword
     *         databasename > backupfile.sql
     */
public static String dbBackUp(String root, String rootPass, String dbName, String backupsPath,
            String backupsSqlFileName, String... tableName) {
        // 生成备份文件
        String pathSql = backupsPath + backupsSqlFileName;
        try {
            File fileSql = new File(pathSql);
            if (!fileSql.exists()) {
                fileSql.createNewFile();
            }
            String mysql = "mysqldump -u" + root + " -p" + rootPass + " " + dbName + " ";
            for (String string : tableName) {
                mysql = mysql + string + " ";
            }
            mysql = mysql + " --default-character-set=utf8 ";
            System.out.println(mysql);
            System.out.println("cmd命令为:——>>>" + mysql);
            Runtime runtime = Runtime.getRuntime();
            Process child = runtime.exec(mysql);
            // 读取备份数据并生成文件
            InputStream in = child.getInputStream();
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(pathSql), "utf8");
            BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf8"));
            String line = reader.readLine();
            while (line != null) {
                writer.write(line + "\n");
                line = reader.readLine();
            }
            writer.flush();
            System.out.println("数据库已备份到——>>" + pathSql);
        } catch (Exception e) {
            System.out.println("生成m=mysql文件失败");
        }
        return pathSql;
    }

还原

还原所使用的主要是:

//具体的含义就是执行db.sql这个文件
eg:mysql -hhostname -uusername -ppassword databasename < db.sql

具体代码体现:

public static boolean load(String root, String rootPass, String dbName, String fPath) {
        try {
            Runtime rt = Runtime.getRuntime();
            System.out.println("还原");
            // 调用 mysql 的 cmd:
            String mysql = "mysql -u" + root + " -p" + rootPass + " " + dbName;
            Process child = rt.exec("cmd /c " + mysql);
            OutputStream out = child.getOutputStream();// 控制台的输入信息作为输出流
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fPath), "utf8"));
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();
            OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
            writer.write(outStr);
            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
            writer.flush();
            // 别忘记关闭输入输出流
            out.close();
            br.close();
            writer.close();
            System.out.println("还原成功");
        } catch (Exception e) {
            System.out.println("还原失败");
            e.printStackTrace();
        }
        return true;
    }

经测试,可用。

你可能感兴趣的:(使用java控制mysql数据库的备份以及还原)