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;
 }
}
 


分享到:


相關文章: