最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

Mysql自动备份,用MD5实现唯一备份_MySQL

来源:懂视网 责编:小采 时间:2020-11-09 19:41:48
文档

Mysql自动备份,用MD5实现唯一备份_MySQL

Mysql自动备份,用MD5实现唯一备份_MySQL:一、备份数据库,命名为temp.sql,计算其MD5值(MD5计算方法见MD5.java) String dos = cmd /c mysqldump -uroot -pwugroup weixin> D:/mysql_back/temp.sql;// Dos命令 Runtime.getRuntime().exec(dos);
推荐度:
导读Mysql自动备份,用MD5实现唯一备份_MySQL:一、备份数据库,命名为temp.sql,计算其MD5值(MD5计算方法见MD5.java) String dos = cmd /c mysqldump -uroot -pwugroup weixin> D:/mysql_back/temp.sql;// Dos命令 Runtime.getRuntime().exec(dos);

一、备份数据库,命名为temp.sql,计算其MD5值(MD5计算方法见MD5.java)

	String dos = "cmd /c mysqldump -uroot -pwugroup weixin> D:/mysql_back/temp.sql";// Dos命令
	Runtime.getRuntime().exec(dos);// 执行dos命令
	Thread.sleep(1000);// 睡眠一分钟,防止下面那条代码执行太快
	File fileTemp = new File("D:/mysql_back/temp.sql");
	String fileTempString = FileString.getFileString(fileTemp);
	String fileTempMd5 = MD5.GetMD5Code(fileTempString);

二、遍历备份的目录,计算目录下文件的MD5值,分别与temp.sql比较

	File dir = new File("D:/mysql_back");
	File[] fs = dir.listFiles();
	for (int i = 1; i < fs.length; i++) {// i从1开始是为了跳过temp.sql这个文件
	String fileString = FileString.getFileString(fs[i]);
	String fileMd5 = MD5.GetMD5Code(fileString);
	// System.out.println(fileTempMd5);
	// System.out.println(fileMd5);
	if (fileMd5.equals(fileTempMd5)) { // 如果有和这个文件一样的文件那么就退出
	System.exit(0);
	}
	}

四、如果有一样的则退出程序

	if (fileMd5.equals(fileTempMd5)) { // 如果有和这个文件一样的文件那么就退出
	System.exit(0);
	}

五、如果目录下所有文件都不一样则将temp改名为当前时间保存

	String name = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString();// 获取当前时间并格式化
	File rename = new File(fileTemp.getParent() + File.separator+ "weixin_" + name + ".sql");// 如果没有这个文件那么将创建的temp文件重命名	
	// System.out.println(rename);
	fileTemp.renameTo(rename);
	System.exit(0);

附代码:

package backup;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * @author wuxingye
 * 
 */
public class Main {

	/**
	 * main函数
	 * 
	 * @param args
	 * @throws IOException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws IOException,
	InterruptedException {
	String dos = "cmd /c mysqldump -uroot -pwugroup weixin> D:/mysql_back/temp.sql";// Dos命令
	Runtime.getRuntime().exec(dos);// 执行dos命令
	Thread.sleep(1000);// 睡眠一分钟,防止下面那条代码执行太快
	File fileTemp = new File("D:/mysql_back/temp.sql");
	String fileTempString = FileString.getFileString(fileTemp);
	String fileTempMd5 = MD5.GetMD5Code(fileTempString);
	// TODO Auto-generated method stub
	File dir = new File("D:/mysql_back");
	File[] fs = dir.listFiles();
	for (int i = 1; i < fs.length; i++) {// i从1开始是为了跳过temp.sql这个文件
	String fileString = FileString.getFileString(fs[i]);
	String fileMd5 = MD5.GetMD5Code(fileString);
	// System.out.println(fileTempMd5);
	// System.out.println(fileMd5);
	if (fileMd5.equals(fileTempMd5)) { // 如果有和这个文件一样的文件那么就退出
	System.exit(0);
	}
	}
	String name = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
	.toString();// 获取当前时间并格式化
	File rename = new File(fileTemp.getParent() + File.separator// 如果没有这个文件那么将创建的temp文件重命名
	+ "weixin_" + name + ".sql");
	// System.out.println(rename);
	fileTemp.renameTo(rename);
	System.exit(0);
	}
}
FileString.java

package backup;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * 将File转换成String,文件转换成字符串
 * 
 * @author wuxingye
 */
public class FileString {
	/**
	 * 
	 * @param file
	 * @return 返回文件内容,以字符串方式返回
	 */
	public static String getFileString(File file) {
	BufferedReader br = null;
	StringBuffer sb = null;
	try {
	br = new BufferedReader(new FileReader(file));
	sb = new StringBuffer();
	String str = null;
	// 一次读入一行,直到读入null为文件结束
	while ((str = br.readLine()) != null) {
	if (!str.contains("Dump completed on")) {
	// 导出数据的文件最后一行为-- Dump completed on 2014-10-26 20:03:21
	// 导出数据库的最后一行会有结束的时间,这样每次到处的文件MD5都不一样,所以去掉这一行
	sb.append(str);// StringBuffer比String快
	}
	}
	br.close();
	} catch (IOException e) {
	e.printStackTrace();
	} finally {
	if (br != null) {
	try {
	br.close();
	} catch (IOException e1) {
	}
	}
	}
	return sb.toString();
	}
}

MD5.java
package backup;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 
 * 获取字符串对应的MD5值
 * 
 * @author 来自网络
 * 
 */
public class MD5 {

	// 全局数组
	private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
	"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

	public MD5() {
	}

	// 返回形式为数字跟字符串
	/**
	 * 
	 * @param bByte
	 * @return 字节转换成字符串,十六进制字符串
	 */
	private static String byteToArrayString(byte bByte) {
	int iRet = bByte;
	// System.out.println("iRet="+iRet);
	if (iRet < 0) {
	iRet += 256;
	}
	int iD1 = iRet / 16;
	int iD2 = iRet % 16;
	return strDigits[iD1] + strDigits[iD2];
	}

	// 返回形式只为数字
	// private static String byteToNum(byte bByte) {
	// int iRet = bByte;
	// System.out.println("iRet1=" + iRet);
	// if (iRet < 0) {
	// iRet += 256;
	// }
	// return String.valueOf(iRet);
	// }

	// 转换字节数组为16进制字串
	/**
	 * 调用byteToArrayString
	 * 
	 * @param bByte
	 * @return 字节转换成字符串,十六进制字符串
	 */
	private static String byteToString(byte[] bByte) {
	StringBuffer sBuffer = new StringBuffer();
	for (int i = 0; i < bByte.length; i++) {
	sBuffer.append(byteToArrayString(bByte[i]));
	}
	return sBuffer.toString();
	}

	/**
	 * 
	 * @param strObj
	 * @return 获取字符串对应的MD5值
	 */
	public static String GetMD5Code(String strObj) {
	// System.out.println(strObj);
	String resultString = null;
	try {
	resultString = new String(strObj);
	MessageDigest md = MessageDigest.getInstance("MD5");
	// md.digest() 该函数返回值为存放哈希值结果的byte数组
	resultString = byteToString(md.digest(strObj.getBytes()));
	} catch (NoSuchAlgorithmException ex) {
	ex.printStackTrace();
	}
	return resultString;
	}
}

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

Mysql自动备份,用MD5实现唯一备份_MySQL

Mysql自动备份,用MD5实现唯一备份_MySQL:一、备份数据库,命名为temp.sql,计算其MD5值(MD5计算方法见MD5.java) String dos = cmd /c mysqldump -uroot -pwugroup weixin> D:/mysql_back/temp.sql;// Dos命令 Runtime.getRuntime().exec(dos);
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top