Java代码实现备份与恢复数据库
Java代码实现备份与恢复数据库
Java代码备份与恢复数据库
数据库备份与恢复
⽣成SQL语句
备份SQL
/**
* 备份数据库语句
*
* @param hostIP
* @param userName
* @param password
* @param databaseName
* @return
*/
private static String[]getBackUpCommand(String hostIP, String userName, String password, String databaseName, String url){        String[] cmd =new String[3];
String os = Properties().getProperty("os.name");
if(os.startsWith("Win")){
cmd[0]="";
cmd[1]="/c";
}else{
cmd[0]="/bin/sh";
cmd[1]="-c";
}
StringBuilder stringBuilder =new StringBuilder();
stringBuilder.append("mysqldump").append(" -h").append(hostIP);
stringBuilder.append(" -u ").append(userName).append(" -p").append(password);
stringBuilder.append(" --databases ").append(databaseName);
stringBuilder.append(" > ").append(url);
cmd[2]= String();
return cmd;
}
恢复SQL
建行银行卡种类*
* @return
*/
private static String[]getCommand(String userName, String psw, String ip, String db, String url){        String[] cmd =new String[3];
String os = Properties().getProperty("os.name");
if(os.startsWith("Win")){
cmd[0]="";
cmd[1]="/c";
}else{
cmd[0]="/bin/sh";
cmd[1]="-c";
高考考试科目时间}
StringBuilder arg =new StringBuilder();
arg.append("mysql ");
arg.append("-h"+ ip +" ");
arg.append("-u"+ userName +" ");
arg.append("-p"+ psw +" ");
arg.append(db +" < ");
arg.append(url);
cmd[2]= String();
return cmd;
}
执⾏
备份
*
* @param hostIP      mysql所在服务器的ip
* @param userName    ⽤户名
* @param password    密码
* @param savePath    保存到服务器的路径
* @param databaseName 需要备份的数据库名
* @return
* @throws InterruptedException
*/
public static boolean backup(String hostIP, String userName, String password,
String savePath, String databaseName, String sdfFmt)throws IOException {
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
// 创建⽂件保存的路径
File saveFile =new File(savePath);
if(!ists()){// 如果⽬录不存在
saveFile.mkdirs();// 创建⽂件夹
}
// 判断保存路径中是否添加了斜杠,如果没有就加上斜杠
if(!dsWith(File.separator)){
savePath = savePath + File.separator;
}
String url = savePath + databaseName +"_"+ sdfFmt +".sql";
File file =new File(url);
if(databases.indexOf(databaseName)<0){
return false;
}
String[] command =getBackUpCommand(hostIP, userName, password, databaseName, url);
boolean flag =backup(file, command);
// 如果处理失败,清除之前所产⽣的sql⽂件
专业音响品牌排名
if(!flag){
deleteFiles(file);
logger.info("备份失败,删除⽂件:"+ Path());怎样查高考分
}
return flag;
}
上⾯的⽅法中有个backup(file, command)⽅法,第⼀个参数为⽣成SQL后,⽂件的全路径,第⼆个参数是⽣成SQL语句时,返回的备份语句,接下来看看backup(file, command)⽅法中的代码:
* 备份⽅法英语四级各题分值
*
* @param file
* @param command
* @throws IOException
*/
public static boolean backup(File file, String[] command){
logger.info("备份⽂件地址:"+ Path());
for(int i =0; i < command.length; i++){
logger.info("备份命令:"+ command[i]);
}
final Process process;
try{
/**
*  >>####特别关注的点>>###
*
*  创建⼀个线程⽤户获取错误流,并且这个错误流是有返回结果的,所以⽤的是Callable来实现
*/
/
/-u后⾯是⽤户名,-p是密码-p后⾯最好不要有空格,-test是数据库的名字
Runtime runtime = Runtime();
logger.info("开始备份数据库中...  command: "+ JSONString(command));
process = (command);
logger.info("数据库备份结束...");
// 新增⼀个线程⽤于处理错误流,如果有错误就返回true,没有就返回false
ErrorStreamUtil errThread =new ErrorStreamUtil(process);
FutureTask<Boolean> result =new FutureTask<Boolean>(errThread);
new Thread(result).start();
()){
return false;
}
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
执⾏backup(file, command)⽅法时,创建了⼀个实现Callable接⼝的对象,这个对象⽤于处理执⾏数据库备份时产⽣的信息,如果备份失败,会把失败的⽂件删除掉,代码如下:
s.tools;
log.ZLoggerFactory;
import org.slf4j.Logger;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import urrent.Callable;
public class ErrorStreamUtil implements Callable<Boolean>{
private final static Logger logger = Logger(ErrorStreamUtil.class);
private Process process;
public ErrorStreamUtil (Process inputStream){
this.process = inputStream;
}
@Override
public Boolean call()throws Exception {
BufferedReader bufferedReader =new BufferedReader(new ErrorStream(),"utf-8"));        String s = null;
StringBuffer errorSb =new StringBuffer();
boolean flag =true;
// 备份过程中出现错误就直接返回
while((s = adLine())!= null){
<("数据库备份错误流信息:"+ s);
// mysql由于对明⽂展⽰密码来执⾏备份会写出warning警告,我们⽤flag做标识来排除第⼀⾏内容
数据库恢复if(flag){
flag =false;
}else{
errorSb.append(s);
}
}
int ret = process.waitFor();
if(ret ==0){
if(errorSb.length()>0){
String error = String();
<("cmd命令出现错误,请仔细核对语句: "+ error);
bufferedReader.close();
return true;
}
bufferedReader.close();
return false;
}
return true;
}
}
删除备份失败的⽂件调⽤的是:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论