windows系统下使用java语言,在mysql数据库中做定时数据备份、删除
有这样一个业务需求,需要将数据归档的表每月定时备份,并且删除之前表中的数据,话不多说,直接上代码!
注意:这种方法适合数据量小,业务要求不高的场景!
项目采用SpringBoot + MyBatis + MySql实现。
以下是详细的代码步骤说明:
第一步:在springboot下新建task定时任务类,并且定义方法。
package com.nb.nbbl.utils.task;
import com.nb.nbbl.mapper.TaskMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
@Slf4j
public class Task {
private final static String ip="127.0.0.1";
private final static int port= 3306;
private final static String user="root";
private final static String password="root";
private final static String databasenameame ="nbbl.2#";
@Autowired
private TaskMapper taskMapper;
@Scheduled(cron = "0 55 23 1 * ?") // 每月1号的23点59分执行
// @Scheduled(cron = "*/10 * * * * ?")
public void backMysql() throws IOException, InterruptedException {
log.info("备份数据库");
String backDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
//判断是windows系统还是linux系统
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")) {
System.out.println(os + "执行备份");
dataBaseDump(ip, port, user, password, backDate);
}
}
public void dataBaseDump(String ip,int port,String user,String passWord,String backDate) throws IOException, InterruptedException {
File file = new File("D:\\MysqlBackFile");
if(!file.exists()){
file.mkdir();
}
// 注意这句命令一定要加上\\很容易出错
String command =" D:\\mysqldump\\mysqldump -h" +ip+ " -P" +port+ " -u" +user+ " -p" +passWord+ " " +databasenameame+ ">" +file+"\\"+backDate+".sql";
System.out.println(command);
StringBuilder msg = new StringBuilder();
BufferedReader bufferedReader = null;
Process proc = null;
//命令之间不能有空格
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", command);
// pb.directory(new File(dir));
try {
proc = pb.start();
System.out.println( proc.getOutputStream());
bufferedReader = new BufferedReader(new InputStreamReader(proc.getErrorStream(), "gbk"));
String line;
while ((line = bufferedReader.readLine()) != null) {
msg.append(line);
}
System.out.println(msg);
proc.waitFor();
if( proc.waitFor() ==0){
System.out.println("数据备份成功");
//数据备份成功后,执行删除操作,删除7天以前的数据
taskMapper.deleteData2();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
}
}
if(proc!=null){
proc.destroy();
}
}
}
}
第二步:定义删除数据接口
package com.nb.nbbl.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TaskMapper {
void deleteData2();
}
第三步:编写task.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nb.nbbl.mapper.TaskMapper">
<!-- <insert id="insert" parameterType="com.nb.nbbl.entity.DeviceTable">-->
<!-- insert into device_table(device_code,age,birthday,status) values(#{name},#{age},#{birthday},#{status})-->
<!-- </insert>-->
<delete id="deleteData2" >
{call deleteData()}
</delete>
</mapper>
第四步:编写存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `deleteData`()
BEGIN
#Routine body goes here...
delete from bar_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from btm where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from cavitytemp where DATE_SUB(CURDATE(), INTERVAL 7 DAY) >date(systime);
delete from device where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_area_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_whole_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_inn_out_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from pressure where DATE_SUB(CURDATE(), INTERVAL 7 DAY) >date(systime);
delete from product_type where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from robot_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from safety_bolt_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from warnning_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
END
第五步:查看结果

至此,简单的数据备份这个功能点已经实现了!
windows系统下使用java语言,在mysql数据库中做定时数据备份、删除的更多相关文章
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- Linux系统下 解决Qt5无法连接MySQL数据库的方法
Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...
- JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...
- MySQL_(Java)使用JDBC向数据库中修改(update)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- MySQL_(Java)使用JDBC向数据库中插入(insert)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- C#实现MySQL数据库中的blob数据存储
在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...
- 64位Windows系统下32位应用程序连接MySql
1.首先得安装“Connector/ODBC”,就是Mysql的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是x64还是x86,只要你的应用程序是x86的那么, ...
- 通过java代码往mysql数据库中写入日期相关数据少13个小时
通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...
- JDBC Java 程序从 MySQL 数据库中读取数据,并封装到 Javabean 对象中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 连接 MySQL 数据库 用于测试的 M ...
- Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下
解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...
随机推荐
- ue项目--浏览器出现卡顿及崩溃的原因查找与解决方案
一些内存泄露的情况进行了排查 全局变量 定时器 使用未销毁的全局事件和第三方库 v-if和v-show不合理使用,v-if和v-for不合理使用 使用watch
- glibc被卸载恢复过程
问题描述:升级软件包时,rpm -e glibc --nodeps 卸载了glibc软件,glibc是系统命令库,之后一些命令不能使用,系统几近奔溃恢复步骤: 1). 挂载装系统光盘,设置从光盘启动, ...
- Ubuntu 20.04 部署kubernetes 网络组件calico-v3.2.1
1.官方网址: https://projectcalico.docs.tigera.io/archive/v3.21/getting-started/kubernetes/self-managed-o ...
- [OC] 统计代码行数
1.打开终端 2. cd 路径,或者 输入cd ,然后把要统计代码的工程拖入终端,就会出现工程的路径. 然后按下回车. 3.输入: find . -name "*.m" -or - ...
- Java输入输出格式
一.输入字符串 Scanner in=new Scanner(System.in); String str1=in.next(); //输入一个字符串,以空格或回车结束 String str2=in. ...
- redis字段使用说明
Set(集合)增删改查: #删除当前选择数据库中的所有key127.0.0.1:6379> flushdbOK#生成set集合,添加4个数据127.0.0.1:6379> sadd set ...
- AX2012 快速清空整个log表数据
如果当一个log表的数据非常大的时又需要清理时,如果允许删除全部数据,在AX里,可以 将log表的TableType调整为[TempDB], 保存同步后再将TableType设置回[Regular]即 ...
- 内存模型和名称空间复习题(c++ prime plus )
第一题 注意到setgolf()被重载,可以这样使用其第一个版本: golf ann; setgolf(ann, "Ann Birdfree", 24); 上述函数调用提供了存储在 ...
- Vue3引用全局js
在vue3中引入全局js: 1,创建一个js文件: 2,在main.js中引入该js文件: import comm from './utils/comm' app.config.globalPrope ...
- centeros忘记root登录密码
转载自:https://www.cnblogs.com/dongml/p/10333819.html 很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办 第1 ...