使用 Apache Commons Exec 自动化脚本执行实现 MySQL 数据库备份
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.PumpStreamHandler;
import java.io.File;
public class MySQLBackupAutomation {
public static void backupMySQLDatabase(String username, String password, String host, String databaseName, String backupFilePath, long timeout) {
try {
File backupFile = new File(backupFilePath);
// 确保父目录存在
File parentDir = backupFile.getParentFile();
if (parentDir.exists() || parentDir.mkdirs()) {
String command = String.format("mysqldump -u %s -p%s -h %s %s > %s",
username, password, host, databaseName, backupFilePath);
DefaultExecutor executor = new DefaultExecutor();
// 设置执行超时
ExecuteWatchdog watchdog = new ExecuteWatchdog(timeout);
executor.setWatchdog(watchdog);
// 设置输入输出处理
PumpStreamHandler streamHandler = new PumpStreamHandler(new FileOutputStream(backupFile));
executor.setStreamHandler(streamHandler);
// 执行命令
executor.execute(CommandLine.parse(command));
System.out.println("数据库备份成功: " + backupFilePath);
} else {
System.err.println("无法创建备份目录: " + parentDir);
}
} catch (Exception e) {
System.err.println("数据库备份失败: " + e.getMessage());
}
}
public static void main(String[] args) {
// 示例调用
backupMySQLDatabase("username", "password", "localhost", "databaseName", "/path/to/backup.sql", 30000);
}
}
这段代码使用了Apache Commons Exec库来自动化执行MySQL数据库的备份命令。它创建了一个备份文件的File对象,检查了父目录是否存在,并创建了目录。然后它构建了一个包含用户名、密码、主机、数据库名称和输出文件路径的mysqldump命令字符串。使用DefaultExecutor执行命令,并通过PumpStreamHandler重定向了输入输出。最后,它设置了一个执行超时,以防止命令执行时间过长。
评论已关闭