原文:Window系统的mysql数据库定时备份 - Stars-One的杂货小窝

最近老大提到了数据库备份的功能,由于服务器是window系统的,所以研究了下备份的方案,特此记录

主要是实现每天定时备份功能,如果还要搞容灾的话,就得对mysql数据库进行主从配置了

cmd命令

核心的cmd命令如下所示

"D:\app\dev\MySQL Server 5.5\bin\mysqldump.exe" -uroot -proot --opt --default-character-set=utf8 -e --triggers -R --hex-blob --flush-logs -x db_package >D:/temp/db_backup/db_package20220.sql

命令的更多使用可以参考MySQL命令行导入导出工具--mysqldump命令详解

之后的bat命令也是在此基础上进行改造

实现

bat命令:

echo 取日期、时间变量值
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
if /i %time:~0,2% lss 10 set hh=0%time:~1,1%
if /i %time:~0,2% geq 10 set hh=%time:~0,2%
set mn=%time:~3,2%
set ss=%time:~6,2%
set date=%yy%%mm%%dd%
set time=%hh%%mn%%ss% %这里不要具体时分数据,要的话可以追加time%
set filename=%date% %赋值等号两边不能有空格%
set mysqldumpPath="D:\app\dev\MySQL Server 5.5\bin\mysqldump.exe"
set dbName=db_package
set dbUser=root
set dbPwd=root
set outpurDir=D:/temp/db_backup/ set outputFileName=%outpurDir%%dbName%_%filename%.sql echo %outputFileName% %mysqldumpPath% -u%dbUser% -p%dbPwd% --opt --default-character-set=utf8 -e --triggers -R --hex-blob --flush-logs -x %dbName% > %outputFileName%

将上面的内容复制到bat文件里,然后将上面的5个变量进行修改:

  • mysqldumpPath 你本地mysql路径
  • dbName 需要备份的数据库
  • dbUser 数据库用户名
  • dbPwd 数据库密码
  • outpurDir 备份文件输出路径

之后如果想要定时,有以下两种方法:

  1. Spring Boot项目中加入定时任务去执行bat文件
  2. 使用window的任务计划功能

Spring Boot的定时任务

目标:每天凌晨0:00备份一次数据库,最大保存30天数据,超过的自动删除最久的那一份数据

首先,我们要知道java应该如何执行bat文件,通过以下代码执行bat文件

Runtime.getRuntime().exec("cmd /c run.bat")

主要区别:

#转至https://blog.csdn.net/liuyukuan/article/details/5974517
cmd /c command 执行完命令后关闭命令窗口。
cmd /k command 执行完命令后不关闭命令窗口。
cmd /c start command 会打开一个新窗口后执行命令,原窗口会关闭。
cmd /k start command 会打开一个新窗口后执行命令,原窗口不会关闭。

定时的话,使用Spring Boot里的定时任务即可

1.Application类中标明注解@EnableScheduling,可开启定时任务


@SpringBootApplication
@EnableScheduling
public class BusinessApplication { }

2.创建你的定时任务类:

/**
* @author starsone
* @date 2022/12/09 11:52
*/
@Component
public class DbBackupService {
/**
* 每天凌晨0:00触发
*/
@Scheduled(cron="0 0 0 * * ?")
private void scheduled3(){
File file = new File(dbBkFile);
if (file.exists()) {
File[] files = file.getParentFile().listFiles();
if (files.length > 30) {
//文件超过30个,删最旧的那个文件
File oldFile = Arrays.stream(files).sorted((o1, o2) -> {
Long l = o1.lastModified();
Long l2 = o2.lastModified();
return l.compareTo(l2);
}).findFirst().get();
oldFile.delete();
}
System.out.println("-------------开始数据库备份------------");
try {
Runtime.getRuntime().exec("cmd /c " + dbBkFile);
} catch (IOException e) {
System.out.println("------------备份失败,出现异常----------");
e.printStackTrace();
}
} else {
System.out.println("------------备份失败,bat文件未找到----------");
}
}
}

cron表达式常用示例:

  • 0 0 12 * * ? 每天中午12点触发
  • 0 15 10 ? * * 每天上午10:15触发
  • 0/2 * * * * ? 表示每2秒 执行任务
  • 0 0/2 * * * ? 表示每2分钟 执行任务
  • 0 0 12 ? * WED 表示每个星期三中午12点

    - 0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
  • 0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行

window系统任务计划

具体看参考12、windows定时备份数据库 - 云起时。 - 博客园













参考

Window系统的mysql数据库定时备份的更多相关文章

  1. window自动任务实现数据库定时备份

    原理:利用window定时任务定时cmd加载mytask.bat文件,bat运行php.exe程序编译运行mytask.php文件 ,从而实现了数据库的备份 mytask.bat 内容: D:\php ...

  2. windows下mysql数据库定时备份。

    注意:看本教程先必须会windows自带的"任务计划程序". 首先创建一个bat后缀的文件我的是timerExecutePhp.bat文件 timerExecutePhp.bat ...

  3. Linux下实现MySQL数据库定时备份

    咳~ 咳~ 为了避免数据操作失误.数据丢失.甚至删库跑路,简单做个数据备份吧 1.创建备份目录 # 习惯放在 local 下 cd /usr/local/ # 创建备份目录 mkdir backup ...

  4. Linux系统下MySQL数据库的备份和恢复

    当我们MySQL数据库保存重要数据的时候,备份工作极为重要.本文介绍如何使用mysqldump备份和恢复数据,使用该方法,可以将数据库中的数据备份成一个文本文件,也可将备份好的数据库迁移到另一台的服务 ...

  5. linux篇-linux mysql数据库定时备份

    1在linux上面创建一个文件夹,并且进行备份 cd /home mkdir backup cd backup 2创建一个脚本 Vi imaginebase.sh #!/bin/bash mysqld ...

  6. MySql 数据库定时备份

    1.使用sqldump+任务计划 mysqldump备份成sql文件==============假想环境:MySQL   安装位置:C:\MySQL论坛数据库名称为:bbsMySQL root   密 ...

  7. mysql数据库定时备份

    最近要用到mysql备份,就写了shell脚本用于备份. #!/bin/bash #定义备份的数据库名称 database=*** #定义备份的时间 currTime=$(date +%Y%m%d) ...

  8. Mysql Navicat数据库定时备份,定时删除

    Navicat自带实现数据库定时备份 1.先点击需要备份的数据库,然后点击计划,再点击新建批处理作业 2.然后出现双机可用任务列表,然后在已选择的任务中会出现可用任务 3. 点击保存,弹出对话框,给这 ...

  9. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  10. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

随机推荐

  1. prometheus告警规则模板:MySQL,nginx,node

    rules_up.yml groups: - name: up rules: - alert: mysql expr: up{instance="db1",job="my ...

  2. kvm上已安装的虚拟机修改为桥接网络

    kvm上安装的虚拟机默认使用的nat网络格式,现在已经调整kvm主机为桥接方式了,但是已经安装的虚拟机还是nat方式,所以需要修改一下 让KVM虚拟主机使用桥接网络br0 修改虚拟机的配置文件,默认存 ...

  3. 第二章:视图层 - 6:QueryDict对象

    类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...

  4. 第1篇----Istio原理篇

    Istio是什么 ◎ Istio是一个用于服务治理的开放平台. ◎ Istio是一个Service Mesh形态的用于服务治理的开放平台. ◎ Istio是一个与Kubernetes紧密结合的适用于云 ...

  5. yaml文件执行后常见错误解决

    yaml文件中个别数值有大写,报错信息如下 : The Deployment "my-nginx" is invalid: spec.template.spec.volumes[0 ...

  6. 我的 Kafka 旅程 - 性能调优

    Producer 于 config/producer.properties 配置文件中的项 # 序列化数据压缩方式 [none/gzip/snappy/lz4/zstd] compression.ty ...

  7. leetcode刷题记录之25(集合实现)

    题目描述: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原 ...

  8. EFCore (二)之 跟踪实体

    核心 SaveChanges() "已分离"和"未改变"的实体,SaveChanges()忽略: "已添加"的实体,SaveChanges( ...

  9. servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)

    文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...

  10. 怎样在GitHub上建立仓库、以及怎样实现分支代码的合并。保姆级别的教程

    GitHub官网地址:https://github.com/ 注意:前提是已经注册了GitHub 文章目录 第一步:创建一个新的仓库 第二步.创建一个分支 第三步.编辑和发布更改的内容 第四步.拉取请 ...