首页 > 数据库 >java代码备份mysql数据库

java代码备份mysql数据库

时间:2023-03-27 12:24:32浏览次数:36  
标签:java String 备份 new append mysql put import resMap

生成环境的数据库我们需要不断的进行备份,不然服务器出现故障,会是灾难性的
直接添加我的代码

package com.hrp.task;

import com.alibaba.fastjson.JSON;
import com.base.exception.SysException;
import com.base.util.UUIDLong;
import com.hrp.sys.dao.SysLogMapper;
import com.hrp.sys.service.BackUpService;
import com.hrp.sys.service.SysLogService;
import org.apache.log4j.Logger;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @Title: com.task
 * @Date: 2020/7/29 5:10
 * @Author: wfg
 * @Description:
 * @Version:
 */
@Service("backUpMysqlScheduled")
@EnableScheduling
public class BackUpMysqlScheduled {
    private static Logger logger = Logger.getLogger(BackUpService.class);

    private static String SAVE_PATH="/ecs/back/";
    private String userName;
    private String password;
    //操作系统
    private String os;
    private String backupIP;
    private String databaseName;
    private String odbcIP;
    private String backPath;
    @Resource(name = "sysLogService")
    private SysLogService sysLogService;
    @Resource(name = "sysLogMapper")
    private final SysLogMapper sysLogMapper = null;


    public void initParame() throws IOException {

        Properties properties = PropertiesLoaderUtils.loadAllProperties("system.properties");
        userName = properties.getProperty("username").toString();
        password = properties.getProperty("password").toString();
        os = properties.getProperty("os").toString();
        backupIP = properties.getProperty("backupip").toString();
        String[] jdbcPars = properties.getProperty("url").toString().split("\\?")[0].split("/");
        databaseName = jdbcPars[3];
        odbcIP=jdbcPars[2].split(":")[0];
        backPath = properties.getProperty("backPath").toString();
    }

    @Scheduled(cron = "0 0 13,23 * * ?")
    public void backUpMysql() {
        System.out.println("backupmysql============================");
        Map<String, Object> resMap = new HashMap<String, Object>();
        Map<String, Object> mapVo=new HashMap<String, Object>();
        this.saveLog(mapVo);
        resMap.put("state", "false");

        try {
            initParame();
            if("win".equals(os)){  //操作系统是window备份程序
                backUpMysqlInWin(resMap);
            }else if("linux".equals(os)){  //操作系统是linux备份程序
                backUpMysqlInLinux(resMap);
            }
        }  catch (Exception e) {
            e.printStackTrace();
            resMap.put("msg", "数据库备份失败!"+e.getMessage());
            throw new SysException(e.getMessage(),e);
        } finally {
            sysLogService.updateSysLogByInterface(mapVo.get("uuid").toString(), JSON.toJSONString(resMap));
        }
    }

    public void backUpMysqlInWin(Map<String, Object> resMap) throws Exception {
        String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".sql";
        String pathSql = backPath+fileName;
        System.out.println(pathSql);
        File fileSql = new File(pathSql);
        //创建备份sql文件
        if (!fileSql.exists()){
            fileSql.createNewFile();
        }

        //mysqldump -hlocalhost -uroot -p123456 db > /home/back.sql
        StringBuffer sb = new StringBuffer();
        //sb.append(" C:\\Users\\zht>");
        String url = System.getProperty("hrp.root")+"/WEB-INF/classes/";
        //sb.append("E:\\svn\\HRPCloud\\HRP_ECS\\out\\artifacts\\HRP_ECS_Web_exploded\\WEB-INF\\classes\\");
        sb.append(url);
        sb.append("mysqldump");
        sb.append(" -h"+odbcIP);
        sb.append(" -u"+userName);
        sb.append(" -p"+password);
        sb.append(" "+databaseName+" >");
        sb.append(pathSql);
        logger.debug("cmd命令为:"+sb.toString());
        Runtime runtime = Runtime.getRuntime();
        logger.debug("开始备份:"+databaseName);
        Process p = runtime.exec("cmd /c"+sb.toString());
        if(p.waitFor()==0){
            resMap.put("state", "true");
            resMap.put("msg", "数据库备份成功!");
        } else {
            resMap.put("state", "false");
            resMap.put("msg", "数据库备份失败!线程异常终止");
        }
    }
    public void backUpMysqlInLinux(Map<String, Object> resMap) throws Exception {
        String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".gz";
        File saveFile = new File(SAVE_PATH);
        if (!saveFile.exists()) {// 如果目录不存在
            saveFile.mkdirs();// 创建文件夹
        }
        //mysqldump -uroot -pDhcc1024 hrp_ecs > /ecs/back/.sql
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("mysqldump");
        stringBuilder.append(" -h").append(odbcIP).append(" -u").append(userName).append(" -p").append(password).append(" ").append(databaseName).append(" | gzip");
        stringBuilder.append(" > ").append(SAVE_PATH + fileName);
        Process process = Runtime.getRuntime().exec(new String[] {"sh", "-c", stringBuilder.toString() });
        if (process.waitFor() == 0) {// 0 表示线程正常终止。
            resMap.put("msg", "数据库备份成功!");
            //scp /root/.ssh/id_rsa [email protected]:/backup/data/
            StringBuilder stringScpBuilder = new StringBuilder();
            stringScpBuilder.append("scp");
            stringScpBuilder.append(" ").append(SAVE_PATH+fileName).append(" ").append("root@"+backupIP).append(":/ecsbackup/data/");
            Process processScp = Runtime.getRuntime().exec(new String[] {"sh", "-c", stringScpBuilder.toString() });
            if (processScp.waitFor() == 0) {// 0 表示线程正常终止。
                resMap.put("state", "true");
                resMap.put("msg", "数据库备份成功!");
                //删除昨天的sql文件
                //deleteYestdaySql();
            }
        } else {
            resMap.put("state", "false");
            resMap.put("msg", "数据库备份失败!线程异常终止");
        }
    }
    public void saveLog( Map<String, Object> mapVo){

        String logId= UUIDLong.absStringUUID();
        mapVo.put("uuid",logId );
        mapVo.put("opuser", 0);
        mapVo.put("optype", 2); //2 任务
        mapVo.put("opcode", "backUpMysql");
        mapVo.put("oparg", "");
        sysLogMapper.saveSysLogByInterface(mapVo);
    }

}

window系统下进行备份的时候出现了几个问题

1.用户没有权限的问题根据错误代码进行百度解决即可
2.可以访问但是我们备份的文件为空的问题
a.将mysql安装目录下的/bin\mysqldump.exe 拷贝到项目中
b. 路径中不能有特殊字符,空格之类的,由于mysql直接默认安装在\Program Files 有空格不可以

标签:java,String,备份,new,append,mysql,put,import,resMap
From: https://www.cnblogs.com/edda/p/17261129.html

相关文章

  • 剑指offer04(Java)二维数组中的查找(中等)
    题目:在一个n*m的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一......
  • mysql查看死锁
    查看死锁Mysql查询是否存在锁表有多种方式,这里只介绍一种最常用的。1、查看正在进行中的事务SELECT*FROMinformation_schema.INNODB_TRX2、查看正在锁的事务......
  • Java静态代理和动态代理的区别
    一、静态代理代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。优点:可以在......
  • Mysql 修改表编码
    Mysql修改表编码,字段编码还是以前的Mysql修改表编码,字段编码未变ALTERTABLE`table6`CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_bin;--ALTERTABLE`rent......
  • 【JavaScript快速排序算法】不同版本原理分析
    说明快速排序(QuickSort),又称分区交换排序(partition-exchangesort),简称快排。快排是一种通过基准划分区块,再不断交换左右项的排序方式,其采用了分治法,减少了交换的次数。它的......
  • 某大厂面试题:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
    大家好,我是三友~~今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是......
  • MYSQL执行顺序
    MYSQL的执行顺序如下所示:fromonjoinwheregroupbyhavingselectdistinctunionorderby可以看到,select是在where后执行的,也就是说,select下的窗口函数也是在where之后执行的......
  • 自动生成sql 这是MySQL例子
    @TestpublicvoidtestGeneSql(){try{Stringss=getFileContentTwo("D:\test\13json.txt");JSONObjectjo=JSONObject.parseObject(ss);JSONAr......
  • Java 在代码中区分json和array
    publicstaticvoidmain(String[]args){Stringn="{\n"+""data":[\n"+"{\n"+""category":"设计资质",\n"+""certNameL......
  • java List报错Method threw ‘java.lang.UnsupportedOperationException‘ exception.
    List<String>status=Arrays.asList(query.getStatus().name());if(query.getStatusMap()==1){if(query.getStatus().equals(FileStatus.EXTRACTING)){......