【运维】【实战】[数据备份]----定时备份公司重要mysql数据库(windows脚本)

前言:

公司里的服务器内总有一些总要的数据,比如 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
    

测试结果:

设定最近的一个时间。然后看结果

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值