springboot 数据库备份
备份成功的前提,需要配置mysql环境变量,然后重启电脑
- 实体类
public class MysqlBackups implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
/**
* mysql ip端口
*/
private String mysqlIp;
/**
* 数据库端口号
*/
private String mysqlPort;
/**
* 备份命令
*/
private String mysqlCmd;
/**
* 恢复命令
*/
private String mysqlBackCmd;
/**
* 数据库名称
*/
private String databaseName;
/**
* 备份文件名称
*/
private String backupsName;
/**
* 备份路径
*/
private String backupsPath;
/**
* 操作次数
*/
private Integer operation;
/**
* 备份时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date backupTime;
/**
* 恢复时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date recoveryTime;
/**
* 备注
*/
private String remark;
}
- 数据库备份 实现类
public interface IMysqlBackupsService extends IService<MysqlBackups> {
/**
* 数据库备份
* @param filePath 备份地址
* @param userName 数据库名称
* @param password 数据库密码
* @param ip 数据库ip
* @param port 数据库端口号
* @param database_name 数据库名称
* @param remark
* @return
*/
R mysqlBackups(String filePath, String ip, String port, String database_name, String userName, String password, String remark);
}
@Service
public class MysqlBackupsServiceImpl extends ServiceImpl<MysqlBackupsMapper, MysqlBackups> implements IMysqlBackupsService {
/**
* 数据库备份
* @param filePath 备份地址
* @param userName 数据库名称
* @param password 数据库密码
* @param ip
* @param port
* @param database_name
* @param remark
* @return
*/
@Transactional
@Override
public R mysqlBackups(String filePath, String userName, String password, String ip, String port, String database_name, String remark) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
// 数据库文件名称
StringBuilder mysqlFileName = new StringBuilder()
.append(database_name)
.append("_")
.append(sdf.format(new Date()))
.append(Constant.FILE_SUFFIX);
// 备份命令
StringBuilder cmd = new StringBuilder()
.append("mysqldump ")
.append("--no-tablespaces ")
.append("-h")
.append(ip)
.append(" -u")
.append(userName)
.append(" -p")
.append(password)
// 排除MySQL备份表
.append(" --ignore-table ")
.append(database_name)
.append(".mysql_backups ")
.append(database_name)
.append(" > ")
.append(filePath)
.append(mysqlFileName);
// 判断文件是否保存成功
if (!new File(filePath).exists()) {
new File(filePath).mkdirs();
}
// 获取操作系统名称
String osName = System.getProperty("os.name").toLowerCase();
String[] command = new String[0];
if (Constant.isSystem(osName)) {
// Windows
command = new String[]{"cmd", "/c", String.valueOf(cmd)};
} else {
// Linux
command = new String[]{"/bin/sh", "-c", String.valueOf(cmd)};
}
MysqlBackups mysqlBackups = new MysqlBackups();
// 备份信息存放到数据库
mysqlBackups.setMysqlIp(ip);
mysqlBackups.setMysqlPort(port);
mysqlBackups.setBackupsName(String.valueOf(mysqlFileName));
mysqlBackups.setDatabaseName(database_name);
mysqlBackups.setMysqlCmd(String.valueOf(cmd));
mysqlBackups.setBackupsPath(filePath);
mysqlBackups.setBackupTime(new Date());
mysqlBackups.setOperation(0);
mysqlBackups.setRemark(remark);
this.save(mysqlBackups);
try {
// 获取Runtime实例
Runtime.getRuntime().exec(command);
return R.ok("Mysql 数据库备份成功,备份文件名:{}"+ mysqlFileName);
} catch (Exception e) {
e.printStackTrace();
return R.error("网络异常,数据库备份失败");
}
}
}
- 控制类
/**
* 数据库用户名
*/
@Value("${spring.datasource.druid.username}")
private String userName;
/**
* 数据库密码
*/
@Value("${spring.datasource.druid.password}")
private String password;
/**
* 数据库ip
*/
@Value("${spring.datasource.ip}")
private String ip;
/**
* 数据库端口号
*/
@Value("${spring.datasource.port}")
private String port;
/**
* 数据库名称
*/
@Value("${spring.datasource.dbname}")
private String dbname;
/**
* Windows数据库备份地址
*/
@Value("${spring.datasource.win-path}")
private String windowsPath;
/**
* Linux数据库备份地址
*/
@Value("${spring.datasource.linux-path}")
private String linuxPath;
public R mysqlBackups(@RequestBody MysqlBackups backups) {
String path = null;
// 获取操作系统名称
String osName = System.getProperty("os.name").toLowerCase();
if (Constant.isSystem(osName)) {
// Windows
path = this.windowsPath;
} else {
// Linux
path = this.linuxPath;
}
// 数据库用户名
String userName = this.userName;
// 数据库密码
String password = this.password;
// 数据库ip
String ip = this.ip;
// 数据库端口号
String port = this.port;
// 数据库名称
String dbname = this.dbname;
R r = mysqlBackupsService.mysqlBackups(path, userName, password, ip, port, dbname , backups.getRemark());
return r;
}
- 工具类Constant
/**
* 文件后缀
*/
public static final String FILE_SUFFIX = ".sql";
/**
* 判断操作系统类型、Linux|Windows
*/
public static boolean isSystem(String osName) {
Boolean flag = null;
if (osName.startsWith("windows")) {
flag = true;
} else if (osName.startsWith("linux")) {
flag = false;
}
return flag;
}