mysql数据库的备份和还原

package com.cn.springbootdatabase;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class cc {
 public static void main(String[] args) {
 /*// 数据库导出
 String user = "root"; // 数据库帐号
 String password = "123456"; // 数据库密码
 String database = "home"; // 需要备份的数据库名
 String filepath = "D:\\mysql.sql"; // 需要备份到的地址
 String stmt1 = "mysqldump " + database + " -u " + user + " -p" + password + " --result-file=" + filepath;
 try {
 Runtime.getRuntime().exec(stmt1);
 System.out.println("数据已导出到文件" + filepath + "中");
 } catch (IOException e) {
 e.printStackTrace();
 }*/
 SimpleDateFormat sd=new SimpleDateFormat("yyyyMMddHHmmss");
 String root = "root";
 String rootPass = "123456";
 String dbName = "home";
 String backupsPath = "D:";
 String backupsSqlFileName = "homeDB_"+sd.format(new Date())+".sql";
 dbBackUp(root, rootPass, dbName, backupsPath, backupsSqlFileName);
 backup();
 load();
 }
 public static String dbBackUp(String root,String rootPass,String dbName,String backupsPath,String backupsSqlFileName)
 {
 //生成临时备份文件
// SimpleDateFormat sd=new SimpleDateFordckupsSqlFileName;
 String pathSql = backupsPath+backupsSqlFileName;
 try {
 File fileSql = new File(pathSql);
 if(!fileSql.exists()){
 fileSql.createNewFile();
 }
 StringBuffer sbs = new StringBuffer();
 sbs.append("mysqldump ");
 sbs.append(" -h 127.0.0.1 ");
 sbs.append(" -u ");
 sbs.append(root+" ");
 sbs.append("-p"+rootPass+" ");
 sbs.append(dbName);
 sbs.append(" --default-character-set=utf8 ");
// sbs.append(">"+pathSql);
 sbs.append(" --result-file="+pathSql);
 System.out.println("cmd命令为:——>>>"+sbs.toString());
 Runtime runtime = Runtime.getRuntime();
 Process child = runtime.exec(sbs.toString());
 //读取备份数据并生成临时文件
 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) {
 }
 return pathSql;
 }
 public static boolean backup() {//备份
 SimpleDateFormat sd=new SimpleDateFormat("yyyyMMddHHmmss");
 try {
 Runtime rt = Runtime.getRuntime();
 String mysql = "mysqldump -uroot -p123456 home --default-character-set=utf8 ";
// mysql ="C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin"+mysql;
 System.out.println("mysql=============>>>>"+mysql);
 // 调用 mysql 的 cmd:
 Process child = rt
 .exec("cmd /c "+mysql);// 设置导出编码为utf8。这里必须是utf8
 // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
 InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
 InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
 String inStr;
 StringBuffer sb = new StringBuffer("");
 String outStr;
 // 组合控制台输出信息字符串
 BufferedReader br = new BufferedReader(xx);
 while ((inStr = br.readLine()) != null) {
 sb.append(inStr + "\r\n");
 }
 outStr = sb.toString();
 // 要用来做导入用的sql目标文件:
 FileOutputStream fout = new FileOutputStream(
 "D:/homeDB_"+sd.format(new Date())+".sql");
 OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
 writer.write(outStr);
 // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
 writer.flush();
 // 别忘记关闭输入输出流
 in.close();
 xx.close();
 br.close();
 writer.close();
 fout.close();
 System.out.println("/* Output OK! */");
 String error="备份成功!";
 } catch (Exception e) {
 e.printStackTrace();
 }
 return true;
 }
 public static boolean load() {//还原
 try {
 String fPath = "D:/mysql.sql";
 Runtime rt = Runtime.getRuntime();
 // 调用 mysql 的 cmd:
 Process child = rt.exec("mysql -uroot -p123456 home ");
 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("/* Load OK! */");
 } catch (Exception e) {
 e.printStackTrace();
 }
 return true;
 }
}
 


分享到:


相關文章: