用bat写一个定时备份数据库某几个表的脚本

1.首先是bat脚本的固定框架

@echo off
setlocal

endlocal
  • @echo off 其中@抑制当前命令的回显,echo off关闭命令回显
  • setlocal 和 endlocal 是 Windows 命令行脚本中用于限定本地环境变量作用范围的命令

2.然后设置下要备份的数据库的信息

rem 目标MySQL数据库信息
set DB_HOST=数据库ip
set DB_PORT=端口
set DB_USER=用户名
set DB_PASSWORD=密码
set DB_NAME=数据库名
set DB_LIST_FRONT_NAME=数据表名
  • 由于bat的for循环中的变量调用搞得头痛我就没搞遍历数据表名列表

3.设置日志以及sql文件的保存位置

rem 设置日志文件路径
set LOG_FILE=Z:\demo\DataBaseBackup\execution_log.txt
rem 备份文件保存路径
set BACKUP_DIR=Z:\demo\DataBaseBackup\sql

4.定义动态的完整数据sql文件路径

rem 获取当前日期作为备份文件名的一部分
set CURRENT_YEAR=%DATE:~0,4%
set CURRENT_MONTH=%DATE:~5,2%

rem 减去 1,使用 ! 扩展变量,并加上括号
set /a PREVIOUS_MONTH=!CURRENT_MONTH! - 1

rem 处理跨年的情况
if !PREVIOUS_MONTH! lss 1 (
    set PREVIOUS_MONTH=12
)
set CURRENT_DATE=%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

rem 格式化年份和月份(月份不足两位前面补零)
set FORMATTED_YEAR=%CURRENT_YEAR%
if !PREVIOUS_MONTH! lss 10 set PREVIOUS_MONTH=0!PREVIOUS_MONTH! else set PREVIOUS_MONTH=!PREVIOUS_MONTH!

set DB_LIST_NAME=%DB_LIST_FRONT_NAME%_%FORMATTED_YEAR%_%PREVIOUS_MONTH%

rem 完整的备份文件路径
set BACKUP_FILE=%BACKUP_DIR%\%DB_LIST_NAME%.sql
  • 当要用到 ! 的时候就需要在前面启用延迟扩展了,bat获取实时更新的变量就要用!
rem 启用延迟扩展
setlocal enabledelayedexpansion

5.使用mysqldump开始备份

rem 使用 mysqldump 命令进行备份
mysqldump -h %DB_HOST% -P %DB_PORT% -u %DB_USER% -p%DB_PASSWORD% %DB_NAME% --tables %DB_LIST_NAME% > %BACKUP_FILE% 2> %LOG_FILE%
  • 我这还将数据库出错的内容重映射到了日志文件中

6.打印日志

rem 设置执行语句对象
set RUNNER=mysqldump -h %DB_HOST% -P %DB_PORT% -u %DB_USER% -p%DB_PASSWORD% %DB_NAME% --tables %DB_LIST_NAME% ^> %BACKUP_FILE%

rem 检查备份是否成功
if !ERRORLEVEL! equ 0 (
    echo %DATE:~0,10% %TIME%:MySQL备份成功,备份文件保存在: %BACKUP_FILE%,执行语句为: !RUNNER! >> %LOG_FILE%
) else (
    echo %DATE:~0,10% %TIME%:MySQL备份失败,执行语句为: !RUNNER! >> %LOG_FILE%
    echo 错误级别: !ERRORLEVEL! >> %LOG_FILE%
)

7.写一个脚本启动多个脚本

@echo off
setlocal

rem 设置日志文件路径
set LOG_FILE=Z:\demo\DataBaseBackup\execution_log.txt

set DB_NAME=demo1
call Z:\demo\DataBaseBackup\%DB_NAME%.bat
echo %DB_NAME%备份已完成 >> %LOG_FILE%

set DB_NAME=demo2
call Z:\demo\DataBaseBackup\%DB_NAME%.bat
echo %DB_NAME%备份已完成 >> %LOG_FILE%

set DB_NAME=demo3
call Z:\demo\DataBaseBackup\%DB_NAME%.bat
echo %DB_NAME%备份已完成 >> %LOG_FILE%

set DB_NAME=demo4
call Z:\demo\DataBaseBackup\%DB_NAME%.bat
echo %DB_NAME%备份已完成 >> %LOG_FILE%

endlocal
  •  这里注意其他bat脚本的路径要写全,因为用windows的schtasks命令定时启动bat的时候需要

你可能感兴趣的:(skill,数据库)