4 changed files with 330 additions and 2 deletions
			
			
		@ -0,0 +1,119 @@ | 
				
			|||
package com.zc.business.controller; | 
				
			|||
 | 
				
			|||
import com.ruoyi.common.config.RuoYiConfig; | 
				
			|||
import lombok.extern.slf4j.Slf4j; | 
				
			|||
import org.springframework.core.env.Environment; | 
				
			|||
import org.springframework.scheduling.annotation.Scheduled; | 
				
			|||
import org.springframework.stereotype.Component; | 
				
			|||
 | 
				
			|||
import java.io.File; | 
				
			|||
import java.io.IOException; | 
				
			|||
import java.text.SimpleDateFormat; | 
				
			|||
import java.time.LocalDate; | 
				
			|||
import java.time.LocalDateTime; | 
				
			|||
import java.util.Date; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 数据库定时备份任务 | 
				
			|||
 * 在backup文件夹中备份最近七日的数据库文件, 备份文件夹 与当前程序同一目录 | 
				
			|||
 */ | 
				
			|||
@Component | 
				
			|||
@Slf4j | 
				
			|||
public class DcMYSQLJob { | 
				
			|||
    private final Environment environment; | 
				
			|||
 | 
				
			|||
    private static final String IP = "10.0.81.202"; | 
				
			|||
 | 
				
			|||
    private static final String PORT = "3306"; | 
				
			|||
 | 
				
			|||
    private static final String USER = "root"; | 
				
			|||
 | 
				
			|||
    private static final String PASSWORD = "mysql123!@#"; | 
				
			|||
 | 
				
			|||
    public DcMYSQLJob(Environment environment) { | 
				
			|||
        this.environment = environment; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Scheduled(cron = "0 0 22 * * ?") | 
				
			|||
    //@Scheduled(cron = "0 25 * * * ?")
 | 
				
			|||
    public void backupAthena() throws IOException { | 
				
			|||
        String url = "jdbc:mysql://10.0.81.202:3306/athena?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true"; | 
				
			|||
 | 
				
			|||
        extracted(url, "athena"); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Scheduled(cron = "0 30 22 * * ?") | 
				
			|||
    //@Scheduled(cron = "0 27 * * * ?")
 | 
				
			|||
    public void backupJiHeDC() throws IOException { | 
				
			|||
        // 数据库配置信息
 | 
				
			|||
        String url = "jdbc:mysql://10.0.81.202:3306/jihe-dc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true"; | 
				
			|||
 | 
				
			|||
        extracted(url, "jihe-dc"); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Scheduled(cron = "0 0 23 * * ?") | 
				
			|||
    //@Scheduled(cron = "0 56 * * * ?")
 | 
				
			|||
    public void backupJiHeDCPro() throws IOException { | 
				
			|||
        // 数据库配置信息
 | 
				
			|||
        String url = "jdbc:mysql://10.0.81.202:3306/jihe-dc-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true"; | 
				
			|||
 | 
				
			|||
        extracted(url, "jihe-dc-pro"); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    private static void extracted(String url, String nameOfTheDatabase) throws IOException { | 
				
			|||
        LocalDateTime now = LocalDateTime.now(); | 
				
			|||
        log.info("*******************时间:【{}】, 系统开启定时任务数据库备份*******************", now); | 
				
			|||
 | 
				
			|||
        // 第三个 :号下标
 | 
				
			|||
        int subStrIndex = url.indexOf(":", url.indexOf(":", url.indexOf(":") + 1) + 1); | 
				
			|||
 | 
				
			|||
        // IP
 | 
				
			|||
        String host = url.substring(url.indexOf("//") + 2, subStrIndex); | 
				
			|||
 | 
				
			|||
        // 端口
 | 
				
			|||
        String subStr2 = url.substring(subStrIndex); | 
				
			|||
 | 
				
			|||
        String port = subStr2.substring(1, subStr2.indexOf("/")); | 
				
			|||
 | 
				
			|||
        // 数据库名
 | 
				
			|||
        String dataBaseName = subStr2.substring(subStr2.indexOf("/") + 1, subStr2.indexOf("?")); | 
				
			|||
 | 
				
			|||
        // 环境
 | 
				
			|||
        String os = System.getProperties().getProperty("os.name"); | 
				
			|||
 | 
				
			|||
        log.info("备份环境信息:【{}】, 用户名:【{}】,密码:【{}】, 地址:【{}】, 端口:【{}】,数据库:【{}】", os, url, PASSWORD, host, port, dataBaseName); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        LocalDate localDate = LocalDate.now(); | 
				
			|||
 | 
				
			|||
        String filePath = RuoYiConfig.getDownloadMysqlPath(); | 
				
			|||
 | 
				
			|||
        Date date = new Date(); | 
				
			|||
 | 
				
			|||
        String format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss ").format(date).replace(" ", ""); | 
				
			|||
 | 
				
			|||
        String fileName = nameOfTheDatabase + "_" + format + ".sql"; | 
				
			|||
 | 
				
			|||
        File file = new File(filePath, fileName); | 
				
			|||
 | 
				
			|||
        file.getParentFile().mkdirs(); | 
				
			|||
 | 
				
			|||
        file.createNewFile(); | 
				
			|||
 | 
				
			|||
        // 备份今天数据库
 | 
				
			|||
        DcMYSQLUtil.backup(IP, PORT, USER, PASSWORD, dataBaseName, file); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        // 删除七天前数据库备份文件 LocalDate
 | 
				
			|||
        LocalDate before = localDate.minusDays(7); | 
				
			|||
        String fileBeforeName = nameOfTheDatabase + "-" + before + ".sql"; | 
				
			|||
        File fileBefore = new File(filePath, fileBeforeName); | 
				
			|||
        if (fileBefore.exists()) { | 
				
			|||
            fileBefore.delete(); | 
				
			|||
        } | 
				
			|||
        log.info("*******************时间:【{}】, 系统结束定时任务数据库备份*******************", now); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
@ -0,0 +1,140 @@ | 
				
			|||
package com.zc.business.controller; | 
				
			|||
 | 
				
			|||
import java.io.*; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
public class DcMYSQLUtil { | 
				
			|||
    /** | 
				
			|||
     * 导出sql文件 | 
				
			|||
     * | 
				
			|||
     * @param host     ip地址 | 
				
			|||
     * @param port     端口 | 
				
			|||
     * @param userName 用户名 | 
				
			|||
     * @param password 密码 | 
				
			|||
     * @param dbName   数据库名 | 
				
			|||
     * @param file     文件对象 | 
				
			|||
     */ | 
				
			|||
    public static void backup(String host, String port, String userName, String password, String dbName, File file) { | 
				
			|||
 | 
				
			|||
        String cmd = "mysqldump --single-transaction " + " -h" + host + " -P" + port + " -u" + userName + " -p" + password + " --databases --skip-extended-insert " + dbName + " > " + file.getPath(); | 
				
			|||
        String os = System.getProperties().getProperty("os.name"); | 
				
			|||
        if (os.contains("Windows")) { | 
				
			|||
            // Windows 需要加上 cmd /c
 | 
				
			|||
            cmd = "cmd /c " + cmd; | 
				
			|||
        } | 
				
			|||
        System.out.printf("cmd命令为:%s%n", cmd); | 
				
			|||
        try { | 
				
			|||
            Process process = Runtime.getRuntime().exec(cmd); | 
				
			|||
 | 
				
			|||
            if (process.waitFor() == 0) { | 
				
			|||
                System.out.printf(" 数据库:%s 备份成功!%n", dbName); | 
				
			|||
            } else { | 
				
			|||
                System.out.printf(" 数据库:%s 备份失败!%n", dbName); | 
				
			|||
            } | 
				
			|||
        } catch (IOException | InterruptedException e) { | 
				
			|||
            e.printStackTrace(); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
//    /**
 | 
				
			|||
//     * 导入sql文件
 | 
				
			|||
//     *
 | 
				
			|||
//     * @param host         ip地址
 | 
				
			|||
//     * @param port         端口
 | 
				
			|||
//     * @param userName     用户名
 | 
				
			|||
//     * @param password     密码
 | 
				
			|||
//     * @param databaseName 数据库名
 | 
				
			|||
//     * @param file         文件对象
 | 
				
			|||
//     */
 | 
				
			|||
//    public static void reduction(String host, String port, String userName, String password, String databaseName, File file) throws Exception {
 | 
				
			|||
//        if (!file.exists()) {
 | 
				
			|||
//            System.out.printf("文件:%s 不存在,请检查%n", file.getPath());
 | 
				
			|||
//            return;
 | 
				
			|||
//        }
 | 
				
			|||
//        String filePath = file.getPath();
 | 
				
			|||
//        String cmd = "mysql -h" + host + " -P" + port + " -u" + userName + " -p" + password + " " + databaseName + " < " + filePath;
 | 
				
			|||
//        String os = System.getProperties().getProperty("os.name");
 | 
				
			|||
//        if (os.contains("Windows")) {
 | 
				
			|||
//            // Windows 需要加上 cmd /c
 | 
				
			|||
//            cmd = "cmd /c " + cmd;
 | 
				
			|||
//        }
 | 
				
			|||
//        System.out.printf("数据库还原命令:%s%n", cmd);
 | 
				
			|||
//
 | 
				
			|||
//
 | 
				
			|||
//        //拼接cmd命令
 | 
				
			|||
//        Process exec = Runtime.getRuntime().exec(cmd);
 | 
				
			|||
//        if (exec.waitFor() == 0) {
 | 
				
			|||
//            System.out.printf("数据库:%s 还原成功,还原的文件为:%s%n", databaseName, filePath);
 | 
				
			|||
//        } else {
 | 
				
			|||
//            System.out.println(databaseName + "数据库还原失败");
 | 
				
			|||
//            System.out.printf("数据库:%s 还原失败", databaseName);
 | 
				
			|||
//        }
 | 
				
			|||
//    }
 | 
				
			|||
//
 | 
				
			|||
//
 | 
				
			|||
//    /**
 | 
				
			|||
//     * 导入sql文件
 | 
				
			|||
//     *
 | 
				
			|||
//     * @param file     文件对象
 | 
				
			|||
//     * @param user     用户
 | 
				
			|||
//     * @param password 密码
 | 
				
			|||
//     * @param db       数据库
 | 
				
			|||
//     */
 | 
				
			|||
//    public static void load(File file, String user, String password, String db) {
 | 
				
			|||
//        try {
 | 
				
			|||
//            Runtime rt = Runtime.getRuntime();
 | 
				
			|||
//            String command = "mysql -u" + user + " -p" + password + " --default-character-set=utf8 " + db;
 | 
				
			|||
//            Process child = rt.exec(command);
 | 
				
			|||
//            OutputStream outputStream = child.getOutputStream();
 | 
				
			|||
//            BufferedReader bufferedReader = new BufferedReader(
 | 
				
			|||
//                    new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8));
 | 
				
			|||
//            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
 | 
				
			|||
//            String str;
 | 
				
			|||
//            while ((str = bufferedReader.readLine()) != null) {
 | 
				
			|||
//                outputStreamWriter.write(str + "\r\n");
 | 
				
			|||
//            }
 | 
				
			|||
//            outputStreamWriter.flush();
 | 
				
			|||
//            outputStream.close();
 | 
				
			|||
//            bufferedReader.close();
 | 
				
			|||
//            outputStreamWriter.close();
 | 
				
			|||
//            System.out.println("数据库导入完成");
 | 
				
			|||
//        } catch (Exception e) {
 | 
				
			|||
//            e.printStackTrace();
 | 
				
			|||
//        }
 | 
				
			|||
//    }
 | 
				
			|||
//
 | 
				
			|||
//
 | 
				
			|||
///*
 | 
				
			|||
//    public static void main(String[] args) throws Exception {
 | 
				
			|||
//        File file = new File("C:\\Users\\hansonh\\Desktop\\jar", "backup.sql");
 | 
				
			|||
//
 | 
				
			|||
//
 | 
				
			|||
//        System.out.println("系统环境:" + System.getProperties().getProperty("os.name"));
 | 
				
			|||
//
 | 
				
			|||
//        String subStr = "jdbc:mysql://127.0.0.1:3306/pms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull";
 | 
				
			|||
//
 | 
				
			|||
//
 | 
				
			|||
//        // 第三个 :号下标
 | 
				
			|||
//        int subStrIndex = subStr.indexOf(":", subStr.indexOf(":", subStr.indexOf(":") + 1) + 1);
 | 
				
			|||
//        // IP
 | 
				
			|||
//        String host = subStr.substring(subStr.indexOf("//") + 2, subStrIndex);
 | 
				
			|||
//        System.out.println("IP:" + host);
 | 
				
			|||
//
 | 
				
			|||
//        // 端口
 | 
				
			|||
//        String subStr2 = subStr.substring(subStrIndex);
 | 
				
			|||
//        String port = subStr2.substring(1, subStr2.indexOf("/"));
 | 
				
			|||
//        System.out.println("端口:" + port);
 | 
				
			|||
//
 | 
				
			|||
//        // 数据库名
 | 
				
			|||
//        String dataBaseName = subStr2.substring(subStr2.indexOf("/") + 1, subStr2.indexOf("?"));
 | 
				
			|||
//
 | 
				
			|||
//        System.out.println("数据库名:" + dataBaseName);
 | 
				
			|||
//
 | 
				
			|||
//        // 备份数据库
 | 
				
			|||
//        DbUtil.backup( "127.0.0.1","3306", "dev1", "dev1", "pms", file);
 | 
				
			|||
//        // 恢复数据库
 | 
				
			|||
////        DbUtil.reduction( "127.0.0.1","3306", "root", "123456", "pms", file);
 | 
				
			|||
//    }
 | 
				
			|||
//
 | 
				
			|||
// */
 | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue