From 5d739fbf09719fc4e7f86b3ced0ee174c27a5de7 Mon Sep 17 00:00:00 2001 From: whyclj <1525436766@qq.com> Date: 星期五, 26 七月 2019 10:36:58 +0800 Subject: [PATCH] 服务器端修改接收数据库备份文件是压缩包时bug --- DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java | 37 +++++++++++++++++++++++++++---------- 1 files changed, 27 insertions(+), 10 deletions(-) diff --git a/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java b/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java index 2a7e1f4..c8df969 100644 --- a/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java +++ b/DataBase_Bakeup_SocketServer/src/com/main/HzipServer.java @@ -8,15 +8,17 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; +import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Comparator; +import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class HzipServer extends Thread { - public static final String MYSQLBACKUPDIR = "MYSQLBACKUPDIR"; //mysql数据库备份文件夹名称 + public static final String MYSQLBACKUPDIR = "MySqlBackUpDir"; //mysql数据库备份文件夹名称 public static final int MAXSTORAGE = 3; public static boolean ISNEEDDELETE = false; public Socket socket; @@ -39,7 +41,7 @@ InputStream ins = socket.getInputStream(); ZipInputStream zis=new ZipInputStream(ins); - String rootDir=null; + String rootDir="REGULAR_BACKUP"; //在此次连接中,是否是第一次读到ZipEntry.读到的第一个Entry,就是正在被传输的文件夹。 boolean isFirst=true; String savePath="D:"+File.separator+MYSQLBACKUPDIR+File.separator; @@ -57,6 +59,7 @@ while( (ze=zis.getNextEntry())!=null ) { String name=ze.getName(); + System.out.println(name); File file=null; if(ze.isDirectory()) { @@ -94,7 +97,12 @@ } else { - int index=name.indexOf(rootDir); + int index; + if(isFirst) { + index = name.lastIndexOf("\\"); + }else { + index=name.indexOf(rootDir); + } String tempFileDir=name.substring(index,name.length()); file=new File(savePath+tempFileDir); fos=new FileOutputStream(file); @@ -108,6 +116,8 @@ } } socket.close(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + System.out.println("Backup MySql OK at " + sdf.format(new Date())); ISNEEDDELETE = true; } catch (UnknownHostException e) { e.printStackTrace(); @@ -140,7 +150,7 @@ String savePath="D:"+File.separator+MYSQLBACKUPDIR+File.separator; File fileroot = new File(savePath); File[] files = fileroot.listFiles(); - if(ISNEEDDELETE && files.length >3) { + if(ISNEEDDELETE && fileroot.exists() && files.length >3) { deleteFileRoot(savePath, MAXSTORAGE); //删除超过3次的备份数据 ISNEEDDELETE = false; } @@ -183,9 +193,9 @@ if(file.exists()) { File[] files = file.listFiles(); Arrays.sort(files, new CompratorByLastModified()); - if(files.length>=filecount && filecount>0) { + if(files.length>filecount && filecount>0) { //System.out.println("文件夹个数:"+files.length + "\t 最大笔数:"+filecount); - for(int i=(filecount-1);i<files.length;i++) { + for(int i=filecount;i<files.length;i++) { deleteDir(files[i]); } } @@ -216,11 +226,18 @@ DeleteRegularThread deletethread = server.createDeleteRegularThreadStructure(); deletethread.start(); //启动删除多余备份数据库线程 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + System.out.println("MySql BackUpThread Start at "+sdf.format(new Date())); while(true) { - Socket s = serveracept.accept(); - //System.out.println("监听到客户端连接"); - server = new HzipServer(s); - server.start(); + try { + Socket s = serveracept.accept(); + //System.out.println("监听到客户端连接"); + server = new HzipServer(s); + server.start(); + } catch (Exception e) { + e.printStackTrace(); + } } -- Gitblit v1.9.1