PostgreSQL自动备份批处理脚本

postgresql不像mysql备份可以在一句命令中执行

pg数据库只能运行备份命令再输入密码的方式登录备份

以下批处理脚本中,我们通过vbs来完成自动键入密码的交互工作

原设想把所有公用的变量参数提到顶部设置,但是其中有部分不可一用变量就失败,故可以看见下方实现时还是会有具体位置或数据库名出现



echo off

rem 功能:postgresql windows 平台 自动备份脚本


rem 设置pgsql的bin目录
set pgPath= E:/database/postgresql/bin/


rem 设置备份的数据库名
set databasename= dbname



rem 设置备份目录
set backupDir= d:/backup

rem 获取日期
echo %date%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set Filename=%databasename%_%year%%month%%day%.bak




rem 输出密码脚本,缺点很明显密码暴露 (我找到的自动输入密码的方法)
echo set pws=WScript.CreateObject("WScript.Shell")> d:/backup/pws.vbs


echo pws.SendKeys " asdf1234{ENTER}">> d:/backup/pws.vbs


rem 执行脚本自动输入密码(我找到的自动输入密码的方法)
wscript d:/backup/pws.vbs&"%pgPath%/pg_dump.exe" -i -h 127.0.0.1 -p 5432 -U postgres  -F c -b -v -f "d:/backup/%Filename%" dbname


rem 删除脚本
cd %backupDir%
set delvbs= pws.vbs


echo %backupDir%/pws.vbs
 del %delvbs%


rem 将备份文件打包成rar格式,并删除原始备份文件。(确保你已经安装了winrar,如果你没有安装在默认目录,请根据winrar文件的位置修改路径)
rem @if exist d:/backup/"%Dirname%/%Filename%"  ("%ProgramFiles%/winrar/winrar" a -df "d:/backup/%Dirname%/%Filename%.rar" "d:/backup/%Dirname%/%Filename%") 


echo 开始删除%database%数据库,只保留最近两天
REM ----------------删除前天的数据库,保留最近两天的库


@echo off & setlocal ENABLEEXTENSIONS  
call :Date2Day %date:~0,10% sdays 
 
set /a sdays-=2
call :Day2Date %sdays% difdate 


echo.&echo. 
echo %difdate%


set yy=%difdate:~0,4%
set mm=%difdate:~5,2%
set dd=%difdate:~8,2%




set delfilename=%databasename%_%yy%%mm%%dd%.bak
echo delete file %delfilename%
cd %backupDir%
del %delfilename%








:Date2Day 
setlocal ENABLEEXTENSIONS  
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (  
  set yy=%%a & set mm=%%b & set dd=%%c  

set /a dd=100%dd%%%100,mm=100%mm%%%100  
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2  
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 
endlocal&set %2=%j%&goto :EOF 


 
:Day2Date 
setlocal ENABLEEXTENSIONS  
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a  
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5  
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10  
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)  
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF 


@echo on 






标红为需要根据实际环境修改的,最下方为两个函数

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值