前言:
公司里的服务器内总有一些总要的数据,比如 svn文件服务、git代码库、mysql数据库、等等、如果突然哪天停电或死机。很容易导致机械硬盘损坏。所以一般都会做数据备份。
此教程是把机械硬盘的数据拷贝固态硬盘做备份
文件结构介绍
backup_system/
│
├── mysql_backup_schedule.bat # 调度程序,负责任务调度,定时执行–> 备份程序1 、备份程序2
├── mysql_backup1.bat #备份程序1
├── mysql_backup2.bat #备份程序2 (可以复制配置多个 3/4/5/6/7)
配置说明:
原理说明:
1、采用window本地安装的mysql的mysqldump 命令
2、备份路径不存在会自动创建。
4、可以配置多个备份脚本,在定时脚本里配置多个运行即可。
注意:
1、运行脚本时候,请有管理员权限运行。
2、确保 window安装了mysql环境和配置了环境变量。
3、备份的磁盘不要在同一个物理盘上。比如 C/D盘是金士顿的固态硬盘 E/F盘是华硕的机械硬盘。(夸盘备份才是合理的)
4、脚本的编码要用ANSI 要不会中文乱码s_backup1.bat)
备份程序1 (mysql_backup1.bat)
@echo off
setlocal enabledelayedexpansion
:: 配置参数 - 请根据实际情况修改以下信息
set "MYSQL_IP=127.0.0.1" :: MySQL服务器IP地址
set "MYSQL_PORT=3306" :: MySQL端口号
set "MYSQL_USER=root" :: 数据库用户名
set "MYSQL_PASS=zhuzhu" :: 数据库密码
set "DB_NAME=nacos_config" :: 要备份的数据库名称
set "BACKUP_PATH=E:\mysql_backup" :: 备份文件保存路径
:: 检查mysqldump是否在系统路径中,若不在请指定完整路径
set "MYSQL_DUMP=mysqldump"
:: 如果上面的设置不行,请使用下面的方式指定完整路径(示例)
:: set "MYSQL_DUMP=C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"
:: 获取当前日期时间作为文件名一部分,格式为:年月日_时分秒
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "date_part=!dt:~0,4!!dt:~4,2!!dt:~6,2!" :: 年月日
set "time_part=!dt:~8,2!!dt:~10,2!!dt:~12,2!" :: 时分秒
set "timestamp=!date_part!_!time_part!" :: 组合为年月日_时分秒
:: 备份文件名 - 格式为:数据库_年月日_时分秒.sql
set "BACKUP_FILE=!BACKUP_PATH!\!DB_NAME!_!timestamp!.sql"
:: 创建备份目录(如果不存在)
if not exist "!BACKUP_PATH!" (
mkdir "!BACKUP_PATH!"
if !errorlevel! neq 0 (
echo 错误:无法创建备份目录 !BACKUP_PATH!
pause
exit /b 1
)
)
:: 执行备份
echo 开始备份数据库 !DB_NAME! ...
echo 备份文件将保存至:!BACKUP_FILE!
"!MYSQL_DUMP!" --host=!MYSQL_IP! --port=!MYSQL_PORT! --user=!MYSQL_USER! --password=!MYSQL_PASS! ^
--databases !DB_NAME! ^
--add-drop-database ^
--add-drop-table ^
--create-options ^
--complete-insert ^
--extended-insert=FALSE ^
--default-character-set=utf8mb4 ^
--result-file="!BACKUP_FILE!"
:: 检查备份是否成功
if !errorlevel! equ 0 (
echo 数据库 !DB_NAME! 备份成功!
echo 备份文件:!BACKUP_FILE!
) else (
echo 错误:数据库 !DB_NAME! 备份失败!
if exist "!BACKUP_FILE!" del "!BACKUP_FILE!"
pause
exit /b 1
)
echo.
echo 备份完成时间:%date% %time%
endlocal
备份程序2(mysql_backup2.bat)
@echo off
setlocal enabledelayedexpansion
:: 配置参数 - 请根据实际情况修改以下信息
set "MYSQL_IP=127.0.0.1" :: MySQL服务器IP地址
set "MYSQL_PORT=3306" :: MySQL端口号
set "MYSQL_USER=root" :: 数据库用户名
set "MYSQL_PASS=zhuzhu" :: 数据库密码
set "DB_NAME=xiaozhi" :: 要备份的数据库名称
set "BACKUP_PATH=E:\mysql_backup" :: 备份文件保存路径
:: 检查mysqldump是否在系统路径中,若不在请指定完整路径
set "MYSQL_DUMP=mysqldump"
:: 如果上面的设置不行,请使用下面的方式指定完整路径(示例)
:: set "MYSQL_DUMP=C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"
:: 获取当前日期时间作为文件名一部分,格式为:年月日_时分秒
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "date_part=!dt:~0,4!!dt:~4,2!!dt:~6,2!" :: 年月日
set "time_part=!dt:~8,2!!dt:~10,2!!dt:~12,2!" :: 时分秒
set "timestamp=!date_part!_!time_part!" :: 组合为年月日_时分秒
:: 备份文件名 - 格式为:数据库_年月日_时分秒.sql
set "BACKUP_FILE=!BACKUP_PATH!\!DB_NAME!_!timestamp!.sql"
:: 创建备份目录(如果不存在)
if not exist "!BACKUP_PATH!" (
mkdir "!BACKUP_PATH!"
if !errorlevel! neq 0 (
echo 错误:无法创建备份目录 !BACKUP_PATH!
pause
exit /b 1
)
)
:: 执行备份
echo 开始备份数据库 !DB_NAME! ...
echo 备份文件将保存至:!BACKUP_FILE!
"!MYSQL_DUMP!" --host=!MYSQL_IP! --port=!MYSQL_PORT! --user=!MYSQL_USER! --password=!MYSQL_PASS! ^
--databases !DB_NAME! ^
--add-drop-database ^
--add-drop-table ^
--create-options ^
--complete-insert ^
--extended-insert=FALSE ^
--default-character-set=utf8mb4 ^
--result-file="!BACKUP_FILE!"
:: 检查备份是否成功
if !errorlevel! equ 0 (
echo 数据库 !DB_NAME! 备份成功!
echo 备份文件:!BACKUP_FILE!
) else (
echo 错误:数据库 !DB_NAME! 备份失败!
if exist "!BACKUP_FILE!" del "!BACKUP_FILE!"
pause
exit /b 1
)
echo.
echo 备份完成时间:%date% %time%
endlocal
调度脚本(mysql_backup_schedule.bat)
@echo off
setlocal enabledelayedexpansion
:: 全局配置变量 - 在此处修改设置
set "BACKUP_TIME=19:54:00" :: 备份时间(24小时制,格式:HH:MM:SS)
set "BATCH_FILES=mysql_backup1.bat mysql_backup2.bat" :: 需要执行的批处理文件,空格分隔
:: 主循环
:loop
:: 清除屏幕
cls
:: 显示提示信息
echo ===========MySql===================
echo ===========MySql===================
echo ===========MySql===================
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
测试结果:
设定最近的一个时间。然后看结果
如果文章对你有一点点帮助,欢迎【点赞、留言、+ 关注】
您的关注是我创作的动力!若有疑问/交流/需求,欢迎留言/私聊!
多一个朋友多一条路!