原文: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定时备份数据库 - 云起时。 - 博客园













参考

最新文章

  1. JVM内存模型、指令重排、内存屏障概念解析
  2. PHPCMS V9 框架代码分析(入口程序)
  3. jquery点击添加样式,再点击取出样式
  4. MongoDB 入门与实例
  5. Allegro设置十字大光标
  6. jsp简易文件上传(common.fileupload)
  7. osx launchpad删除图标
  8. hdu_2159_FATE(完全背包)
  9. 用于辅助在 bootstrap-dialog 中的表现:app-jquery-dialog.js
  10. IDEA 介绍
  11. testng报告-extentsReports使用-klov
  12. 20165237 2017-2018-2 《Java程序设计》第7周学习总结
  13. python全栈开发 * 03 基本数据类型 * 180601
  14. 02--css背景与边框--css揭秘
  15. css优化,提高性能
  16. php正则表达式入门-常用语法格式
  17. ckeditor4.2.1常用配置
  18. Spring Boot 集成 GRPC
  19. 父级和 子集 controller 之间的通讯
  20. 多媒体开发之分场图像和交错图像interlacing---一个破解版的迅雷云点播网站

热门文章

  1. 4.maven私服nexus2迁移到nexus3
  2. 10_SpringBoot更加详细
  3. 安装 Ubuntu 教程
  4. AspNetCore中 使用 Grpc 简单Demo
  5. KMP模式匹配 学习笔记
  6. [渲染层错误] [jsbridge] invoke remoteDebugInfo fail: too eayly.
  7. golang中的errgroup
  8. git 多个commit 如何合并
  9. 搭建harbor私有仓库
  10. rocky8删除/etc/fstab 和/boot/所有文件,通过光盘救援模式恢复