java实现服务器数据库备份

package cn.xd.dcol.railway.business.utils;


import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
@SpringBootApplication
@EnableScheduling
@Async
@Slf4j
public class BackupUtils {
    public static String username="";//数据库名称
    public static String password="";//数据库密码
    public static String backupPath="/home";//备份数据输出路径
    public static String backFilePrefix="";//备份数据输出文件名前缀
    public static String mysqldumpPath="mysqldump";//直接写mysqldump
    public static String dbName="";//数据库名称
    public static String port="";//端口号

    //@Scheduled(cron = "0 0 18 * * ?")
    public static void backup() {
        //删除文件信息
        try {
            del(backupPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        File file = new File(backupPath);
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = backupPath + "/" + backFilePrefix + LocalDate.now() + ".sql";
        /** 默认使用linux*/
        //String cmdPrefix = "/bin/sh -c ";
        String c1 = "/bin/sh";
        String c2 = "-c";
        String os_name = System.getProperty("os.name");
        // 判断是否是windows系统
        if (os_name.toLowerCase().startsWith("win")){
            //cmdPrefix = "cmd /c ";
            c1 = "cmd";
            c2 = "/c";
        }
        //参考示例:# /usr/local/mysql/bin/mysqldump -uroot -p123456 -P3306 shuju > shuju.sql
        String cmd = mysqldumpPath  // mysqldump的绝对路径,配置环境变量,直接写mysqldump即可
                + " -u" + username  // 数据库用户名
                + " -p" + password  // 数据库密码
                + " -P" + port      // 数据库端口号
                + " " + dbName      // 数据库名
                + " > " + fileName;                   // 最终写入的文件路径
        try {
            System.out.println("第一个参数 " + c1);
            System.out.println("第二个参数 " + c2);
            System.out.println("具体命令 " + cmd);

            log.error("数据库备份START" + LocalDateTime.now());
            /**
             * exec重载方法有一个参数的,window下执行正常,linux下无法完成备份。
             * 使用多参数重载方法都可以正常备份
             */
            Process process = Runtime.getRuntime().exec(new String[]{c1, c2, cmd});
            process.waitFor();
            log.error("数据库备份END" + LocalDateTime.now());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("数据库备份失败:{}", e.getMessage());
        }
    }
    //删除服务器文件夹
    public static void del(String filepath) throws IOException {
        File f = new File(filepath);//定义文件路径
        if(f.exists() && f.isDirectory()){//判断是文件还是目录
           if(f.listFiles().length==0){//若目录下没有文件则直接删除
              f.delete();
            }else{//若有则把文件放进数组,并判断是否有下级目录
               File delFile[]=f.listFiles();
               int i =f.listFiles().length;
               for(int j=0;j<i;j++){
                   if(delFile[j].isDirectory()){
                       del(delFile[j].getAbsolutePath());//递归调用del方法并取得子目录路径
                    }
                    delFile[j].delete();//删除文件
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中使用Spring MVC实现数据库备份可以通过以下步骤实现: 1. 配置数据库连接信息:在Spring MVC的配置文件中,配置数据库的连接信息,包括数据库的URL、用户名和密码。 2. 创建备份文件夹:在服务器上创建一个用于存储数据库备份文件的文件夹。 3. 编写备份方法:在Spring MVC的控制器中,编写一个备份数据库的方法。可以使用Java的Runtime类来执行命令行操作,调用数据库的备份命令将数据库备份到指定的文件夹中。 4. 编写恢复方法:同样在控制器中,编写一个恢复数据库的方法。通过调用数据库的恢复命令,将备份文件中的数据还原到数据库中。 5. 配置路由:在Spring MVC的配置文件中,配置备份和恢复方法的路由信息,使其可以通过URL访问到。 下面是一个示例代码: ```java @Controller @RequestMapping("/database") public class DatabaseController { @RequestMapping("/backup") public void backupDatabase() { try { // 创建备份文件夹 File backupFolder = new File("/path/to/backup/folder"); if (!backupFolder.exists()) { backupFolder.mkdirs(); } // 执行备份命令 String command = "mysqldump -u username -p password database > /path/to/backup/folder/backup.sql"; Process process = Runtime.getRuntime().exec(command); int exitValue = process.waitFor(); if (exitValue == 0) { System.out.println("Database backup successful."); } else { System.out.println("Database backup failed."); } } catch (Exception e) { e.printStackTrace(); } } @RequestMapping("/restore") public void restoreDatabase() { try { // 执行恢复命令 String command = "mysql -u username -p password database < /path/to/backup/folder/backup.sql"; Process process = Runtime.getRuntime().exec(command); int exitValue = process.waitFor(); if (exitValue == 0) { System.out.println("Database restore successful."); } else { System.out.println("Database restore failed."); } } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,上述代码中的`/path/to/backup/folder`应替换为实际的备份文件夹路径,`username`、`password`和`database`应替换为实际的数据库连接信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值