Java实现mysql差异备份
备份前需要开启mysql的binlog日志
直接上代码,mysql差异备份
Properties properties = new Properties();
InputStream is = DataSourceBFUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
assert is != null;
// 获取当前的日期和时间
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String nowStr = now.format(formatter);
// 输出的备份文件路径
String backupPath = "E:/dumpsql/diffpet"+ nowStr + ".sql";
try {
properties.load(is);
String url = properties.getProperty("jdbc.url");
String user = properties.getProperty("jdbc.username");
String password = properties.getProperty("jdbc.password");
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
// 开启二进制日志
String enableBinLogQuery = "SET GLOBAL binlog_format = 'ROW'";
stmt.execute(enableBinLogQuery);
// 获取最新的二进制日志文件名
String getLatestBinLogFileQuery = "SHOW MASTER STATUS";
ResultSet rs = stmt.executeQuery(getLatestBinLogFileQuery);
String latestBinLogFile = "";
if (rs.next()) {
latestBinLogFile = rs.getString("File");
}
System.out.println(latestBinLogFile);
// 刷新二进制日志
String flushLogsQuery = "FLUSH LOGS";
stmt.execute(flushLogsQuery);
stmt.close();
conn.close();
// 创建差异备份
String diffBackupCmd="C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqlbinlog \"C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\"+latestBinLogFile+"\" > \""+backupPath+"\"";
Process process = Runtime.getRuntime().exec(diffBackupCmd);
OutputStream outputStream = new FileOutputStream(backupPath);
// 将备份数据写入输出流
byte[] buffer = new byte[1024];
int length;
while ((length = process.getInputStream().read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.flush();
System.out.println("diffBackup successful.");
} catch (SQLException | IOException e) {
e.printStackTrace();
}