Maison >base de données >tutoriel mysql >Mysql自动备份,用MD5实现唯一备份_MySQL
<span style="white-space:pre"> </span>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);
<span style="white-space:pre"> </span>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); } }
<span style="white-space:pre"> </span>if (fileMd5.equals(fileTempMd5)) { // 如果有和这个文件一样的文件那么就退出 System.exit(0); }
<span style="white-space:pre"> </span>String name = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString();// 获取当前时间并格式化 File rename = new File(fileTemp.getParent() + File.separator<span style="font-family: Arial, Helvetica, sans-serif;">+ "weixin_" + name + ".sql");</span>// 如果没有这个文件那么将创建的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(); } }
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; } }