Window系统的mysql数据库定时备份
最近老大提到了数据库备份的功能,由于服务器是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
备份文件输出路径
之后如果想要定时,有以下两种方法:
- Spring Boot项目中加入定时任务去执行bat文件
- 使用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定时备份数据库 - 云起时。 - 博客园
参考
- MySQL命令行导入导出工具--mysqldump命令详解
- windows下mysql每天定时备份数据库几种方法 - Rukh - 博客园
- 12、windows定时备份数据库 - 云起时。 - 博客园
- java程序执行cmd命令出现权限问题场景相应解决方案_小叶要吃丶肉的博客-CSDN博客
Window系统的mysql数据库定时备份的更多相关文章
- window自动任务实现数据库定时备份
原理:利用window定时任务定时cmd加载mytask.bat文件,bat运行php.exe程序编译运行mytask.php文件 ,从而实现了数据库的备份 mytask.bat 内容: D:\php ...
- windows下mysql数据库定时备份。
注意:看本教程先必须会windows自带的"任务计划程序". 首先创建一个bat后缀的文件我的是timerExecutePhp.bat文件 timerExecutePhp.bat ...
- Linux下实现MySQL数据库定时备份
咳~ 咳~ 为了避免数据操作失误.数据丢失.甚至删库跑路,简单做个数据备份吧 1.创建备份目录 # 习惯放在 local 下 cd /usr/local/ # 创建备份目录 mkdir backup ...
- Linux系统下MySQL数据库的备份和恢复
当我们MySQL数据库保存重要数据的时候,备份工作极为重要.本文介绍如何使用mysqldump备份和恢复数据,使用该方法,可以将数据库中的数据备份成一个文本文件,也可将备份好的数据库迁移到另一台的服务 ...
- linux篇-linux mysql数据库定时备份
1在linux上面创建一个文件夹,并且进行备份 cd /home mkdir backup cd backup 2创建一个脚本 Vi imaginebase.sh #!/bin/bash mysqld ...
- MySql 数据库定时备份
1.使用sqldump+任务计划 mysqldump备份成sql文件==============假想环境:MySQL 安装位置:C:\MySQL论坛数据库名称为:bbsMySQL root 密 ...
- mysql数据库定时备份
最近要用到mysql备份,就写了shell脚本用于备份. #!/bin/bash #定义备份的数据库名称 database=*** #定义备份的时间 currTime=$(date +%Y%m%d) ...
- Mysql Navicat数据库定时备份,定时删除
Navicat自带实现数据库定时备份 1.先点击需要备份的数据库,然后点击计划,再点击新建批处理作业 2.然后出现双机可用任务列表,然后在已选择的任务中会出现可用任务 3. 点击保存,弹出对话框,给这 ...
- mysqldump常用于MySQL数据库逻辑备份
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- 如何用SQL语句实现Mysql数据库的备份与还原
以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...
随机推荐
- prometheus告警规则模板:MySQL,nginx,node
rules_up.yml groups: - name: up rules: - alert: mysql expr: up{instance="db1",job="my ...
- kvm上已安装的虚拟机修改为桥接网络
kvm上安装的虚拟机默认使用的nat网络格式,现在已经调整kvm主机为桥接方式了,但是已经安装的虚拟机还是nat方式,所以需要修改一下 让KVM虚拟主机使用桥接网络br0 修改虚拟机的配置文件,默认存 ...
- 第二章:视图层 - 6:QueryDict对象
类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...
- 第1篇----Istio原理篇
Istio是什么 ◎ Istio是一个用于服务治理的开放平台. ◎ Istio是一个Service Mesh形态的用于服务治理的开放平台. ◎ Istio是一个与Kubernetes紧密结合的适用于云 ...
- yaml文件执行后常见错误解决
yaml文件中个别数值有大写,报错信息如下 : The Deployment "my-nginx" is invalid: spec.template.spec.volumes[0 ...
- 我的 Kafka 旅程 - 性能调优
Producer 于 config/producer.properties 配置文件中的项 # 序列化数据压缩方式 [none/gzip/snappy/lz4/zstd] compression.ty ...
- leetcode刷题记录之25(集合实现)
题目描述: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原 ...
- EFCore (二)之 跟踪实体
核心 SaveChanges() "已分离"和"未改变"的实体,SaveChanges()忽略: "已添加"的实体,SaveChanges( ...
- servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...
- 怎样在GitHub上建立仓库、以及怎样实现分支代码的合并。保姆级别的教程
GitHub官网地址:https://github.com/ 注意:前提是已经注册了GitHub 文章目录 第一步:创建一个新的仓库 第二步.创建一个分支 第三步.编辑和发布更改的内容 第四步.拉取请 ...