【运维】【实战】[数据备份]----定时备份公司重要文件夹数据(windows脚本)
·
文章目录
前言:
公司里的服务器内总有一些总要的数据,比如 svn文件服务、git代码库、mysql数据库、等等、如果突然哪天停电或死机。很容易导致机械硬盘损坏。所以一般都会做数据备份。
此教程是把机械硬盘的数据拷贝固态硬盘做备份

文件结构介绍
backup_system/
│
├── schedule_backup.bat # 调度程序,负责任务调度,定时执行–> 备份程序1 、备份程序2
├── files_backup1.bat #备份程序1
├── files_backup2.bat #备份程序2 (可以复制配置多个 3/4/5/6/7)
配置说明:

原理说明:
1、采用window自带的 robocopy 命令,实现增量备份。
2、文件被其他程序占用也可以备份。
3、备份路径不存在会自动创建。
4、可以配置多个备份脚本,在定时脚本里配置多个运行即可。
注意:
1、运行脚本时候,请有管理员权限运行。
2、确保 window自带的 robocopy 命令没有损坏
3、备份的磁盘不要在同一个物理盘上。比如 C/D盘是金士顿的固态硬盘 E/F盘是华硕的机械硬盘。(夸盘备份才是合理的)
备份程序1 (files_backup1.bat)
@echo off
echo 开始复制文件夹...
:: 原路径
set "filePath=D:\giteaMainPath"
:: 备份路径
set "backPath=E:\backup\giteaMainPath"
:: 使用robocopy命令复制文件夹
:: /E 复制所有子目录,包括空目录
:: /R:3 失败重试3次
:: /W:5 每次重试间隔5秒
:: /NP 不显示复制进度百分比
:: /NDL 不记录目录列表
robocopy "%filePath%" "%backPath%" /E /R:3 /W:5 /NP /NDL
:: 检查命令执行结果
if %errorlevel% equ 0 (
echo 复制完成,没有需要复制的文件
) else if %errorlevel% equ 1 (
echo 复制成功完成
) else if %errorlevel% equ 2 (
echo 复制完成,但有额外的文件被创建
) else if %errorlevel% equ 3 (
echo 复制完成,但有文件被更新
) else if %errorlevel% geq 8 (
echo 复制过程中出现错误
)
echo 操作结束
:: pause 结果后黑窗口不关闭
:: pause
备份程序2(files_backup2.bat)
@echo off
echo 开始复制文件夹...
:: 原路径
set "filePath=D:\svnMainPath"
:: 备份路径
set "backPath=E:\backup\svnMainPath"
:: 使用robocopy命令复制文件夹
:: /E 复制所有子目录,包括空目录
:: /R:3 失败重试3次
:: /W:5 每次重试间隔5秒
:: /NP 不显示复制进度百分比
:: /NDL 不记录目录列表
robocopy "%filePath%" "%backPath%" /E /R:3 /W:5 /NP /NDL
:: 检查命令执行结果
if %errorlevel% equ 0 (
echo 复制完成,没有需要复制的文件
) else if %errorlevel% equ 1 (
echo 复制成功完成
) else if %errorlevel% equ 2 (
echo 复制完成,但有额外的文件被创建
) else if %errorlevel% equ 3 (
echo 复制完成,但有文件被更新
) else if %errorlevel% geq 8 (
echo 复制过程中出现错误
)
echo 操作结束
:: pause 结果后黑窗口不关闭
:: pause
调度脚本(files_backup_schedule.bat)
@echo off
setlocal enabledelayedexpansion
:: 全局配置变量 - 在此处修改设置
set "BACKUP_TIME=17:45:00" :: 备份时间(24小时制,格式:HH:MM:SS)
set "BATCH_FILES=files_backup1.bat files_backup2.bat" :: 需要执行的批处理文件,空格分隔
:: 主循环
:loop
:: 清除屏幕
cls
:: 显示提示信息
echo ===================================
echo 定时数据备份程序运行中....请勿关闭
echo 定时数据备份程序运行中....请勿关闭
echo 定时数据备份程序运行中....请勿关闭
echo -----------------------------------
echo 下次备份时间: %BACKUP_TIME%
echo ===================================
:: 获取当前时间
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "current_date=!dt:~0,4!-!dt:~4,2!-!dt:~6,2!"
set "current_time=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!"
:: 获取星期几
for /f "tokens=3" %%a in ('echo %date%') do set "weekday=%%a"
:: 显示当前时间
echo 当前时间: !current_date! !weekday! !current_time!
echo.
:: 检查是否到达备份时间
if "!current_time!"=="%BACKUP_TIME%" (
echo 到达备份时间,开始执行备份任务...
echo.
:: 逐个执行批处理文件
for %%f in (%BATCH_FILES%) do (
if exist "%%f" (
echo 正在执行: %%f
start /wait cmd /c "%%f"
echo %%f 执行完成
) else (
echo 警告: 未找到文件 %%f,跳过执行
)
echo.
)
echo 所有备份任务执行完成,等待下一次备份时间...
timeout /t 2 /nobreak >nul :: 等待2秒,避免重复执行
)
:: 等待1秒后再次检查
timeout /t 1 /nobreak >nul
goto loop
测试结果:
设定最近的一个时间。然后看结果

如果文章对你有一点点帮助,欢迎【点赞、留言、+ 关注】
您的关注是我创作的动力!若有疑问/交流/需求,欢迎留言/私聊!
多一个朋友多一条路!
更多推荐


所有评论(0)