**Java数据备份与恢复**

1.准备一个properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///management
jdbc.username=root
jdbc.password=root
jdbc.host=你的ip地址
jdbc.exportDatabaseName=management
jdbc.importPath=C:/Users/management.sql
jdbc.port=3306
MysqlPath=C:/Program Files (x86)/MySQL/MySQL Server 5.5/bin/
jdbc.exportPath=C:/Users/management.sql
jdbc.importDatabaseName=management

2.实现数据库的备份与恢复
主要就是读取properties的文件,动态拼接数据库的恢复与备份的代码

import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Properties;
@Component
@EnableScheduling
public class BackUpMysql {
    //定时器
    @Scheduled(cron="0 0 1 * * ?*")
// 实现数据库的备份
    public static void exportSql() throws IOException {
        Properties properties = new Properties();
        //  读取属性文件
        properties.load(Import.class.getClassLoader().getResourceAsStream("jdbc.properties"));
        Runtime runtime = Runtime.getRuntime();
        String command = getExportCommand(properties);
        //  这里其实是在命令窗口中执行的 command 命令行
        runtime.exec(command);
    }
    // 实现数据库的恢复
    public static void importSql() throws IOException {
        Properties properties = new Properties();
        //  读取属性文件
        properties.load(Import.class.getClassLoader().getResourceAsStream("jdbc.properties"));
        Runtime runtime = Runtime.getRuntime();
        //把所执行的命令将以字符串数组的形式出现
        String cmdarray[] = getImportCommand(properties);//根据属性文件的配置获取数据库导入所需的命令,组成一个数组
        Process process = runtime.exec(cmdarray[0]);
        //执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口
        java.io.OutputStream os = process.getOutputStream();
        OutputStreamWriter writer = new OutputStreamWriter(os);
        //命令1和命令2要放在一起执行
        // 这里会执行后面的代码, 将命令输出到mysql的命令窗口,进行执行
        writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);
        writer.flush();
        writer.close();
        os.close();
    }
    //  得到 导入数据 的 命令行语句
    private static String[] getImportCommand(Properties properties) {
        String username = properties.getProperty("jdbc.username");//用户名
        String password = properties.getProperty("jdbc.password");//密码
        String host = properties.getProperty("jdbc.host");//导入的目标数据库所在的主机
        String port = properties.getProperty("jdbc.port");//使用的端口号
        String importDatabaseName = properties.getProperty("jdbc.importDatabaseName");//导入的目标数据库的名称
        String importPath = properties.getProperty("jdbc.importPath");//导入的目标文件所在的位置
        String MysqlPath = properties.getProperty("MysqlPath"); //  路径是mysql中 bin 文件 的位置
        //第一步,获取登录命令语句
        String loginCommand = new StringBuffer().append(MysqlPath).append("mysql -h").append(host).append(" -u").append(username).append(" -p").append(password)
                .append(" -P").append(port).toString();
        //第二步,获取切换数据库到目标数据库的命令语句
        String switchCommand = new StringBuffer().append("use ").append(importDatabaseName).toString();
        //第三步,获取导入的命令语句
        String importCommand = new StringBuffer(" source ").append(importPath).toString();
        //需要返回的命令语句数组
        String[] commands = new String[] {loginCommand, switchCommand, importCommand};
        return commands;
    }
    //  得到 导出数据 的 命令行语句
    private static String getExportCommand(Properties properties) {
        StringBuffer command = new StringBuffer();
        String username = properties.getProperty("jdbc.username");//用户名
        String password = properties.getProperty("jdbc.password");//用户密码
        String exportDatabaseName = properties.getProperty("jdbc.exportDatabaseName");//需要导出的数据库名
        String host = properties.getProperty("jdbc.host");//从哪个主机导出数据库,如果没有指定这个值,则默认取localhost
        String port = properties.getProperty("jdbc.port");//使用的端口号
        String exportPath = properties.getProperty("jdbc.exportPath");//导出路径
        String MysqlPath = properties.getProperty("MysqlPath"); //  路径是mysql中 bin 文件 的位置
        //注意哪些地方要空格,哪些不要空格
        command.append(MysqlPath).append("mysqldump -u").append(username).append(" -p").append(password)//密码是用的小p,而端口是用的大P。
                .append(" -h").append(host).append(" -P").append(port).append(" ").append(exportDatabaseName).append(" -r ").append(exportPath);
        return command.toString();
    }
}

3.读取文件的大小

DecimalFormat format = new DecimalFormat("###.0");
 StringBuffer bytes = new StringBuffer();
 double i =0d ;
 File f= new File(文件的路径);
 if (f.exists() && f.isFile()){
    i= (f.length() / (1024.0));
  }else{
     System.out.println("文件备份有问题");
   }
     bytes.append(format.format(i)).append("KB");
     bytes.toString()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值