Main
public class Main {
public static void main(String[] args) {
//备份数据库
BakDb.bakDB();
//获取本地备份的sql文件
List<String> names = Unitls.sqlFileNameByLocal();
//获取最后一个文件名
String name = names.get(names.size()-1);
System.out.println(name);
//恢复数据库
RestoreDB.restoreDB(name);
}
}
Unitls
public class Unitls {
//设置sql文件的名字
public static String sqlFileNameByDate(){
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
String dateStr = format.format(date);
return dateStr;
}
//获取本地sql文件的名字
public static List<String> sqlFileNameByLocal(){
String path="d:/";
File file = new File(path);
String[] array = file.list();
List<String> list = Arrays.asList(array);
List<String> nameList = new ArrayList<>();
//list=list.stream().filter(item->item.endsWith(".sql")).sorted().collect(Collectors.toList());
for (String s : list) {
if (s.endsWith("sql")){
nameList.add(s.replace(".sql",""));
}
}
return nameList;
}
}
BakDb备份数据库
public class BakDb {
public static void bakDB(){
//设置sql文件的名字
String sqlName = Unitls.sqlFileNameByDate();
//设置参数
String dbIp="127.0.0.1";
String username="root";//用户名
String password="1234";//密码
String dbName="db1";//数据库
String path="d:/";
//备份数据库
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("cmd /c mysqldump -h"+dbIp+" -u"+username+" -p"+password+" --default-character-set=UTF8 --single-transaction "+dbName+" > "+path+sqlName+".sql");
process.waitFor(); //执行完成后进行下一步操作
int i = process.exitValue();
System.out.println(i);
if (i==0){
System.out.println("成功");
}else {
System.out.println("失败");
//删除刚刚最后备份的文件
}
//打印错误流
InputStream errorStream = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(errorStream,"gbk");
BufferedReader br = new BufferedReader(isr);
while (br.readLine() != null) {
System.out.println(br.readLine());
}
process.destroy(); //杀死进程
} catch (Exception e) {
e.printStackTrace();
}
}
}
RestoreDB恢复数据库
public class RestoreDB {
public static void restoreDB(String sqlName){
//设置参数
String dbIp="127.0.0.1";
String username="root";//用户名
String password="1234";//密码
String dbName="db1";//数据库
String path="d:/";//本地保存的路径
//恢复数据库
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("cmd /c mysql -h"+dbIp+" -u"+username+" -p"+password+" --default-character-set=utf8 "+dbName+" < "+path+sqlName+".sql");
process.waitFor(); //执行完成后进行下一步操作
int i = process.exitValue();
System.out.println(i);
if (i==0){
System.out.println("成功");
}else {
System.out.println("失败");
//重新恢复 或联系管理员
}
//打印错误
InputStream errorStream = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(errorStream,"gbk");
BufferedReader br = new BufferedReader(isr);
while (br.readLine() != null) {
System.out.println(br.readLine());
}
process.destroy(); //杀死进程
} catch (Exception e) {
e.printStackTrace();
}
}
}