package com.jk.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
/**
* MySQL数据库备份
*
*/
public class MySQLDatabaseBackup {
/**
* 备份数据库为*.sql
*
* @author GaoHuanjie edit by lxx 2017年12月1日 19:09:56
* @param hostIP
* MySQL数据库所在服务器地址IP
* @param userName
* 进入数据库所需要的用户名
* @param password
* 进入数据库所需要的密码
* @param savePath
* 数据库导出文件保存路径
* @param fileName
* 数据库导出文件文件名
* @param databaseName
* 要导出的数据库名
* @return 返回true表示导出成功,否则返回false。 如果mysql安装目录有空格,如program File(X86)/,
* 则需要将mysql/bin/mysqldump.exe复制到c盘根目录
*/
public static boolean exportDatabaseTool(String hostIP, String userName, String password, String savePath,
String databaseName) throws InterruptedException {
// --start--
// 复制mysql安装路径bin/mysqldump.exe,到C盘根目录,定义这个路径
// 根据库名生成随机备份文件,不覆盖
String mysqldumPath = "C:\\";
String fileName = databaseName + "_backup_";
// 文件夹存在,则生成新备份文件,避免覆盖以前的
fileName += UUID.randomUUID() + ".sql";
// --end--
File saveFile = new File(savePath);
if (!saveFile.exists()) {// 如果目录不存在
saveFile.mkdirs();// 创建文件夹
}
if (!savePath.endsWith(File.separator)) {
savePath = savePath + File.separator;
}
PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
try {
printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
Process process = Runtime.getRuntime().exec("cmd /c " + mysqldumPath + "\\mysqldump -h" + hostIP + " -u"
+ userName + " -p" + password + " --set-charset=UTF8 " + databaseName);
/*
* Process process = Runtime.getRuntime().exec(" mysqldump -h" +
* hostIP + " -u" + userName + " -p" + password +
* " --set-charset=UTF8 " + databaseName);
*/
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
printWriter.println(line);
}
printWriter.flush();
if (process.waitFor() == 0) {// 0 表示线程正常终止。
System.err.println("数据库成功备份!!!");
return true;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.err.println("数据库成功失败!!!");
return false;
}
/**
* <pre>restore(数据库还原)
* 创建人:lengXiaXi
* 创建时间:2017年12月11日 上午10:37:23
* 修改人:lengXiaXi
* 修改时间:2017年12月11日 上午10:37:23
* 修改备注:
* @param exePath mysql.exe的路径
* @param databaseName 要还原的库名
* @param sqlPath sql备份文件的路径
* </pre>
*/
public static void restore(String exePath, String databaseName, String sqlPath,String userName,String userPassword) {
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime
.exec(exePath + " -hlocalhost -u"+userName+" -p"+userPassword+" --default-character-set=utf8 " + databaseName);
OutputStream outputStream = process.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sqlPath), "utf-8"));
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = br.readLine()) != null) {
sb.append(str + "\r\n");
}
str = sb.toString();
System.err.println(str);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "utf-8");
writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
System.err.println("数据库还原成功");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* public static String fPath="D:/test.sql"; public static String comman=
* " F:/soft/javaSoft/mysql免安装/3307/master-3307/bin/mysql -uroot -proot --default-character-set=utf8 test "
* ;
*
* public static void hy() throws IOException{ Runtime rt =
* Runtime.getRuntime(); Process child = rt.exec(comman);
*
* InputStreamReader in =new InputStreamReader(new
* FileInputStream(fPath),"UTF-8"); BufferedReader br =new
* BufferedReader(in);
*
* String inStr =null; StringBuffer sb = new StringBuffer(""); String
* outStr; while((inStr=br.readLine())!=null){ sb.append(inStr + "\r\n"); }
* outStr = sb.toString();
*
* System.err.println(outStr);
*
* OutputStream out = child.getOutputStream(); OutputStreamWriter writer
* =new OutputStreamWriter(out,"UTF-8"); writer.write(outStr);
* writer.flush();
*
* out.flush(); out.close(); br.close(); writer.close();
* System.err.println("数据回复成功!"); }
*/
public static void main(String[] args) {
/*
* try { if (exportDatabaseTool("127.0.0.1", "root", "root", "d://",
* "erp")) { System.err.println("数据库成功备份!!!"); } else {
* System.err.println("数据库备份失败!!!"); } } catch (InterruptedException e)
* { e.printStackTrace(); }
*/
restore("F:/soft/javaSoft/mysql免安装/3307/master-3307/bin/mysql", "test","d:/test.sql","root","root");
}
}
java 实现 MySql数据库的备份,还原。
最新推荐文章于 2021-07-09 12:59:22 发布