一台云服务器windows篇:11、数据备份

在任务计划程序中,定时运行bat文件。

在任务计划程序中,定时运行bat文件。

@echo off
set MYSQL_HOME=C:\Program Files\MariaDB 10.3\bin\
set PATH=%MYSQL_HOME%;%PATH%
:: ---------- 环境检查开始 ----------
set preChcekDate=0
set preChcek7za=0
set preChcekmysqldump=0
:: 要检查 echo %date:~0,10% 的输出内容,不能含斜划线。
:: findstr /c:"/" 查找:成功 ERRORLEVEL=0,失败 ERRORLEVEL=1。
echo %date:~0,10%|findstr /c:"/"
if %ERRORLEVEL%==0 set preChcekDate=1
:: 7za.exe 7za.dll 7zxa.dll mysqldump.exe 的 %path% 中已存在。 <不是内部或外部命令,也不是可运行的程序  ERRORLEVEL=9009>
7za.exe --help > nul
if %ERRORLEVEL%==9009 set preChcek7za=1
mysqldump.exe --help > nul
if %ERRORLEVEL%==9009 set preChcekmysqldump=1

if not "%preChcekDate%%preChcek7za%%preChcekmysqldump%"=="000" call :preChcekFail %preChcekDate% %preChcek7za% %preChcekmysqldump%
:: ---------- 环境检查结束 ----------

:: ---------- 主程序开始 ----------
set backupDir=C:\webData\backups
set dumpDir=C:\Users\Administrator\Downloads
set zipPassword=

set bakMode=bakFiles
:: <if /i>不区分大小写
if /i "%1"=="full" set bakMode=bakFullFiles

call :bakMySQL axshare
call :%bakMode% axShareData C:\webData\axShareData
call :bakMySQL WordPress
call :%bakMode% WordPress C:\webData\WordPress
goto batEnd
:: ---------- 主程序结束 ----------

:: ---------- 子程序开始 ----------
:bakMySQL
echo.
echo ---------- bakMySQL %1 ----------
set dbName=%1
set dbUser=
set dbPassword=""
del /q /f %backupDir%\db_%dbName%_*.7z
mysqldump.exe -hlocalhost -P3306 -u%dbUser% -p%dbPassword% --events --routines --triggers --databases %dbName% > %dumpDir%\db_%dbName%_%date:~0,10%.sql
7za.exe a -t7z -p%zipPassword% %backupDir%\db_%dbName%_%date:~0,10%.7z %dumpDir%\db_%dbName%_%date:~0,10%.sql
del /q /f %dumpDir%\db_%dbName%_%date:~0,10%.sql
goto :eof

:bakFiles
set sourceName=%1
if exist %backupDir%\file_%sourceName%_base.7z (
    call :bakAddUpdateFiles %1 %2
) else (
    call :bakFullFiles %1 %2
)
goto :eof

:bakFullFiles
echo.
echo ---------- bakFullFiles %1  %2 ----------
set sourceName=%1
set sourceDir=%2
del /q /f %backupDir%\file_%sourceName%_*.7z
7za.exe a -t7z -p%zipPassword% %backupDir%\file_%sourceName%_base.7z %sourceDir%
goto :eof

:bakAddUpdateFiles
echo.
echo ---------- bakAddUpdateFiles %1  %2 ----------
for %%a in (%backupDir%\file_%sourceName%_base.7z) do (set dt=%%~ta)
set sourceName=%1
set sourceDir=%2
del /q /f %backupDir%\file_%sourceName%_addList.txt
forfiles /p %sourceDir% /m * /s /d +%dt:~0,10% /c "cmd /c if @isdir==FALSE echo @path >> %backupDir%\file_%sourceName%_addList.txt"
IF EXIST %backupDir%\file_%sourceName%_addList.txt (
    del /q /f %backupDir%\file_%sourceName%_add_*.7z
    :: <a -t7z -p%zipPassword%>有密码压缩的7z文件,-spf2保留目录结构的压缩文件,-scsWIN 以WIN格式读取@List.txt
    7za.exe a -t7z -p%zipPassword% -scsWIN -spf2 %backupDir%\file_%sourceName%_add_%date:~2,10%.7z @%backupDir%\file_%sourceName%_addList.txt
)
goto :eof
:: ---------- 子程序结束 ----------

:preChcekFail
cls
echo ---------- preChcekFail ----------
set preChcekDate=%1
set preChcek7za=%2
set preChcekmysqldump=%3
echo.
if "%preChcekDate%"=="1" echo 需要调整日期格式,%date:~0,10% 不能有斜划线。
if "%preChcek7za%"=="1" echo 7za.exe 7za.dll 7zxa.dll 需要在 path 中已存在。
if "%preChcekmysqldump%"=="1" echo mysqldump.exe 需要在 path 中已存在。
echo.
echo.
:batEnd
exit

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注