import java.io.*;
import java.util.*;
public class DatabaseBackup {
/**
* 备份数据库
*
* @param dbName 数据库名称
* @param dbUserName 数据库用户名
* @param dbPassword 数据库密码
* @param backupPath 备份文件路径
* @throws IOException 如果备份过程中发生 I/O 错误
*/
public static void backupDatabase(String dbName, String dbUserName, String dbPassword, String backupPath) throws IOException {
// 构建备份命令
String command = "mysqldump --user=" + dbUserName + " --password=" + dbPassword + " --databases " + dbName + " > " + backupPath;
// 执行备份命令
Process process = Runtime.getRuntime().exec(command);
// 检查备份是否成功
int exitCode;
try {
exitCode = process.waitFor();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new IOException("备份过程中断", e);
}
// 备份成功
if (exitCode == 0) {
System.out.println("数据库备份成功!");
// 删除上次备份数据
deletePreviousBackup(backupPath);
} else {
System.out.println("数据库备份失败!");
}
}
/**
* 删除上次备份数据
*
* @param backupPath 备份文件路径
*/
private static void deletePreviousBackup(String backupPath) {
File backupFile = new File(backupPath);
if (backupFile.exists()) {
if (backupFile.delete()) {
System.out.println("上次备份数据删除成功!");
} else {
System.out.println("删除上次备份数据失败!");
}
}
}
public static void main(String[] args) {
// 示例用法
String dbName = "your_database_name";
String dbUserName = "your_database_username";
String dbPassword = "your_database_password";
String backupPath = "/path/to/backup/backup.sql";
try {
backupDatabase(dbName, dbUserName, dbPassword, backupPath);
} catch (IOException e) {
System.err.println("备份过程中出现错误:" + e.getMessage());
}
}
}
在 backupDatabase
方法中,备份成功后调用了 deletePreviousBackup
方法,该方法会删除指定路径下的备份数据文件。请确保在指定备份路径时,不要覆盖上次备份的文件,以便成功删除上次备份数据。