应用环境下,数据库和文件经常需要备份,写了如下脚本,可做到备份sqlserver,并将备份文件压缩,拷贝到备份机器上,并且可以拷贝服务器上的图片或应用程序的其他文件到备份机器上
脚本如下,要有的拿去,记得更改红色内容为你本机的设置。
将脚本加到系统定时任务中执行,效果更佳
------------------------------------------------------------------------------------------------------------------------------------------
@echo off
:: --------数据自动备份----------
:: 功能:1.实现生产环境sqlserver数据备份,并将备份文件拷贝到备份服务器上
:: 2.实现普通文件从生产环境下的文件,备份到备份服务器上
:: 原理:建立共享磁盘
:: 数据库备份使用sqlcmd备份数据库文件,
:: 使用rar压缩备份的数据库文件,并将压缩文件拷贝到共享磁盘
:: 使用xcopy拷贝生产环境下的文件到备份服务器
:: 关闭共享磁盘
:: rar程序路径
set rarexe="C:\Program Files (x86)\WinRAR\WinRAR.exe"
set result=1
:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _yyyy=%%L
Set _mm=00%%J
Set _dd=00%%G
Set _hour=00%%H
SET _minute=00%%I
SET _second=00%%K
)
:s_done
:: Pad digits with leading zeros
Set _mm=%_mm:~-2%
Set _dd=%_dd:~-2%
Set _hour=%_hour:~-2%
Set _minute=%_minute:~-2%
Set _second=%_second:~-2%
Set logtimestamp=%_yyyy%%_mm%%_dd%%_hour%%_minute%%_second%
goto make_dump
:s_error
echo 生成时间序列出错
Set logtimestamp=_
:make_dump
:: 开始执行备份操作
set dbbackfilename=D:\MSSQL\Backup\mydatabase_%logtimestamp%.bak
set rarbackfilename=%dbbackfilename:~0,-4%.rar
:: 创建磁盘映射
echo 开始创建磁盘映射H
call :CreateDriverH
:: 数据库备份文件路径
if %result% EQU 1 (
call :DataBaseBackUp %dbbackfilename%
) else ( goto :eof )
echo "开始压缩文件" %dbbackfilename%
if %result% EQU 1 (
call :RarFile %rarbackfilename% %dbbackfilename%
) else ( goto :eof )
echo "开始拷贝数据库备份文件" %rarbackfilename%
if %result% EQU 1 (
call :CopyFolder %rarbackfilename% H:\
del %rarbackfilename%
) else ( goto :eof )
echo "开始拷贝文件备份文件" %rarbackfilename%
if %result% EQU 1 (
call :CopyFolder "C:\Program Files\ServiceFiles" "H:\BackFiles\ServiceFiles"
call :CopyFolder "C:\Program Files\ImagFiles" "H:\BackFiles\ImagFiles"
) else ( goto :eof )
echo "删除磁盘映射H"
call :DeleteDriverH
if %result% EQU 1 (
echo 执行完成
)
goto :eof
:: 创建磁盘映射H
:CreateDriverH
net use H: \\备份机的地址\Database_backup 登入密码 /USER:Administrator
if not exist "H:" (
set result=0
) else (
set result=1
)
goto:eof
:: 删除磁盘映射H
:DeleteDriverH
if not exist "H:" (
set result=1
goto :eof
) else (
net use H: /del /y
)
if not exist "H:" (
set result=1
) else (
set result=0
)
goto:eof
:: 备份数据库 参数是备份文件的路径
:DataBaseBackUp
echo "开始备份文件" %1
SQLCMD -S . -U 数据库用户名 -P 数据库登入密码 -d mydatabase -Q"BACKUP DATABASE mydatabase to disk='%1'"
if exist "%1" (
set result=1
) else (
set result=0
)
goto:eof
xcopy
:: 压缩文件 参数:压缩后的文件 压缩前的文件
:RarFile
echo 压缩文件 %rarexe% a "%1" "%2"
%rarexe% a "%1" "%2"
if exist "%1" (
set result=1
del "%2"
) else (
set result=0
)
goto:eof
:: 考别磁盘下的整个目录 参数:源路径 目标路径
:CopyFolder
echo 拷贝目录 %1 %2
xcopy %1 %2 /D /E /Y
goto:eof
:eof
:: 考别磁盘下的整个目录 参数:源路径 目标路径
:CopyFolder
echo 拷贝目录 %1 %2
xcopy %1 %2 /D /E /Y
goto:eof
:eof
-------------------------------------------------------------------------------------------------------------------------------------------
由于bat不能发送邮件,所以以上脚本执行出问题了,很难发现问题,我用Python3写了一个可以邮件通知的备份脚本,下载链接