package Utils;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class BackUp {
public static void main(String[] args) throws Exception {
boolean b1 = new BackUp().backup();
if(b1){
System.out.println("备份成功");
}else {
System.out.println("备份失败");
}
}
/**
* mysql的备份方法
* @return
*/
public boolean backup() {
String command = "mysqldump -hlocalhost -uroot -proot test | gzip > backupfile.sql.gz";//参数依次是IP、账号、密码、数据库名
//使用LocalDateTime产生时间效率比simpledateformat高
String DateNow = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日-HH点mm分ss秒"));
String savePath = "e:/test"+"-"+DateNow+".sql";
boolean flag;
// 获得与当前应用程序关联的Runtime对象
Runtime r = Runtime.getRuntime();
BufferedReader br = null;
BufferedWriter bw = null;
try {
// 在单独的进程中执行指定的字符串命令
Process p = r.exec(command);
// 获得连接到进程正常输出的输入流,该输入流从该Process对象表示的进程的标准输出中获取数据
InputStream is = p.getInputStream();
// InputStreamReader是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符
InputStreamReader isr = new InputStreamReader(is, "utf-8");
//BufferedReader从字符输入流读取文本,缓冲字符,提供字符,数组和行的高效读取
br = new BufferedReader(isr);
String s;
StringBuffer sb = new StringBuffer("");
// 组装字符串
while ((s = br.readLine()) != null) {
sb.append(s + System.lineSeparator());
}
s = sb.toString();
// 创建文件输出流
FileOutputStream fos = new FileOutputStream(savePath);
// OutputStreamWriter是从字符流到字节流的桥梁,它使用指定的charset将写入的字符编码为字节
OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
// BufferedWriter将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入
bw = new BufferedWriter(osw);
bw.write(s);
bw.flush();
flag = true;
} catch (IOException e) {
flag = false;
e.printStackTrace();
} finally {
//由于输入输出流使用的是装饰器模式,所以在关闭流时只需要调用外层装饰类的close()方法即可,
//它会自动调用内层流的close()方法
try {
if (null != bw) {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (null != br) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
}
}
Java实现mysql数据库的压缩备份(不覆盖原来的备份)
最新推荐文章于 2024-06-05 21:51:29 发布