Prefácio
Para lidar com a falha repentina do banco de dados no projeto, resultando em perda de dados, backups regulares e recuperação do banco de dados podem ser implementados por meio de código.Mesmo se o banco de dados estiver inativo, podemos restaurar as informações de dados previamente armazenadas em backup para o banco de dados. Implementar backup e recuperação de banco de dados por meio de código Java é, na verdade, operar a linha de comando por meio de código Java.Então, como implementar backup e recuperação de banco de dados?Os seguintes casos estão disponíveis para referência.
1. Backup de banco de dados
/**
* 数据库文件备份
*/
@RequestMapping("/doBackup")
public R doBackup(){
System.out.println("现在时间是"+new Date());
Runtime runtime = Runtime.getRuntime(); //获取Runtime实例
String database1 = "equipments"; // 需要备份的数据库名
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String sdfDate = sdf.format(currentDate);
String filepath = "d:\\sql\\time_" + sdfDate + ".sql"; // 备份的路径地址
//执行命令(此处需要定位到mysqldump.exe路径,--default-character-set=gbk是为了解决中文乱码问题)
String stmt = "d:\\wamp64\\bin\\mysql\\mysql5.7.24\\bin\\mysqldump -h localhost -uroot -p12345678 --default-character-set=gbk "+database1+" > "+filepath;
System.out.println(stmt);
try {
String[] command = {
"cmd", "/c", stmt};
Process process = runtime.exec(command);
InputStream input = process.getInputStream();
System.out.println(IOUtils.toString(input, "UTF-8"));
//若有错误信息则输出
InputStream errorStream = process.getErrorStream();
System.out.println(IOUtils.toString(errorStream, "gbk"));
//保存备份数据信息到数据库中
SqlFileEntity sqlFileEntity = new SqlFileEntity();
sqlFileEntity.setName("time_" + sdfDate + ".sql");
sqlFileEntity.setPath(filepath);
sqlFileEntity.setCreateTime(currentDate);
this.save(sqlFileEntity);
} catch (IOException e) {
e.printStackTrace();
}
return R.ok();
}
2. Recuperação de banco de dados
/**
* 还原数据库
*/
@RequestMapping("/restore")
public R restore(@RequestBody String filename) {
String database = "equipments"; // 需要备份的数据库名
System.out.println("现在时间是" + new Date());
Runtime runtime = Runtime.getRuntime();
try {
String filePath = "d:\\sql\\"+filename; // sql文件路径
String stmt = "mysql -h localhost -uroot -p12345678 "+database+"< " + filePath;
System.out.println(stmt);
String[] command = {
"cmd", "/c", stmt};
Process process = runtime.exec(command);
//若有错误信息则输出
InputStream errorStream = process.getErrorStream();
System.out.println(IOUtils.toString(errorStream, "gbk"));
//等待操作
int processComplete = process.waitFor();
if (processComplete == 0) {
System.out.println("还原成功.");
} else {
throw new RuntimeException("还原数据库失败.");
}
} catch (Exception e) {
e.printStackTrace();
}
return R.ok();
}
Resumir
Falarei acima sobre isso hoje. Este artigo apresenta apenas brevemente o código Java para implementar backup e recuperação de banco de dados. Se você deseja implementar backup e recuperação agendados do banco de dados, também precisa escrever um cronômetro ou tarefa agendada e adicionar o backup e a recuperação do banco de dados no horário agendado.