Java操作MySQL数据库备份(使用mysqldump命令)

java备份MySQL数据库


@Value("${backup.sql.database}")privateString databases;@Value("${backup.sql.host}")privateString host;@Value("${backup.sql.username}")privateString username;@Value("${backup.sql.password}")privateString password;privatestaticfinalintMAX_BACKUP_COUNT=7;// 最多保存备份文件的数量/** * 备份MySQL数据库 * * @return 备份文件的绝对路径 */publicvoidbackupSql(){// 定义备份 MySQL 数据库的方法String[] split = databases.split(",");// 根据逗号分隔符,将要备份的数据库名称拆分成数组for(String database : split){// 遍历每个数据库名称String backup_path =ContentsUtil.TEMP_BACKUPSQL+ database +"/";// 备份文件存放目录String currentDate =newSimpleDateFormat("yyyy-MM-dd").format(newDate());// 当前日期String currentTime =newSimpleDateFormat("HH-mm-ss").format(Calendar.getInstance().getTime());// 当前时间String backupFileName = database +"-"+ currentDate +"-"+ currentTime +".sql";// 备份文件名String backupFilePath = backup_path + backupFileName;// 备份文件路径newFile(backup_path).mkdirs();// 创建备份文件存放目录,如果已经存在则不创建try{// 尝试备份数据库List<String> command =newArrayList<>();// 新建命令列表            command.add("mysqldump");// 添加命令:备份 MySQL 数据库            command.add("--host="+ host);// 添加命令参数:MySQL 服务器地址            command.add("--user="+ username);// 添加命令参数:MySQL 用户名            command.add("--result-file="+ backupFilePath);// 添加命令参数:备份文件路径            command.add("--databases");// 添加命令参数:指定要备份的数据库            command.add(database);// 添加要备份的数据库名称ProcessBuilder pb =newProcessBuilder(command);// 创建进程构建器            pb.environment().put("MYSQL_PWD", password);// 设置 MySQL 密码            pb.redirectErrorStream(true);// 合并标准错误输出和标准输出Process runtimeProcess = pb.start();// 启动进程InputStream inputStream = runtimeProcess.getInputStream();// 读取进程的标准输出BufferedReader reader =newBufferedReader(newInputStreamReader(inputStream));// 创建输入流读取器int processComplete = runtimeProcess.waitFor();// 等待进程结束if(processComplete ==0){// 如果进程成功结束deleteOldBackups(backup_path);// 删除多余的备份文件System.out.println("Backup Success: "+ backupFilePath);// 输出备份成功信息}else{// 如果进程没有成功结束System.out.println("Backup Failed");// 输出备份失败信息}}catch(IOException|InterruptedException ex){// 如果出现异常System.out.println("Error: "+ ex.getMessage());// 输出异常信息}}}


/** * 删除多余的备份文件,最多只保留 MAX_BACKUP_COUNT 个文件 */privatestaticvoiddeleteOldBackups(String backup_path){// 创建文件夹对象File backupDir =newFile(backup_path);// 获取该文件夹下的所有文件对象File[] backupFiles = backupDir.listFiles();// 将文件对象数组转换成 List,方便排序和删除List<File> backupList =Arrays.asList(backupFiles);// 对 List 中的文件对象按照修改时间进行升序排序Collections.sort(backupList,newComparator<File>(){publicintcompare(File f1,File f2){returnLong.compare(f1.lastModified(), f2.lastModified());}});// 计算需要删除的文件数量int excessCount = backupList.size()-MAX_BACKUP_COUNT;// 如果需要删除的文件数量大于 0,则循环删除文件if(excessCount >0){for(int i =0; i < excessCount; i++){            backupList.get(i).delete();}}}
评论 (0)
说点什么吧... (取消回复)