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());// 输出异常信息}}}
评论 (0)