- 论坛徽章:
- 0
|
现在win系列下学postgresql的人越来越多了,发一个自己写的win系统下备份维护的脚本,应该叫纯bat批处理,欢迎大家指教。
说明如下:
1、适用于数据量不大的数据库的完全备份;
2、可达到指定备份维护及保留指定备份个数的目的,结合远程可达到远程备份的目的;
3、原来使用的压缩加密功能除掉了,如果想使用可自己适当修改;
4、结合任务计划可应用于生产环境,我在WINDOWS 2003 SERVER及PG 8.3上测试成功
具体脚本如下:
====================
@echo off
rem 需指定变量
rem 指定pgsql用来备份的用户及密码,另一种方式是修改pg_hba.conf的认证方式等
set PGUSER=用户
set PGPASSWORD=密码
rem 指定备份保留个数
set inum=5
rem 指定备份数据库
set idb=webdb
rem 备份前缀,避免误操作
set iprefix=webdb
rem 备份目录,不建议有空格,避免不同软件都需测试
set back_dir=E:\backtemp\
rem pg_dump.exe的绝对路径
set isql=D:\PostgreSQL\bin\pg_dump.exe
rem vacuumdb.exe的绝对路径
set vsql=D:\PostgreSQL\bin\vacuumdb.exe
rem 用7z压缩,此处指定7z.exe的绝对路径
set myzip=d:\Program\7-zip\7z.exe
rem 检查完整性
set ierr="0"
set verr="0"
set zerr="0"
set derr="0"
IF NOT EXIST "%isql%" set ierr="1"
IF NOT EXIST "%vsql%" set verr="1"
IF NOT EXIST "%myzip%" set zerr="1"
IF NOT EXIST "%back_dir%" MKDIR "%back_dir%"
IF NOT EXIST "%back_dir%" set derr="1"
:dcheck
IF %derr%=="0" goto icheck
ECHO "%back_dir%" error!>>pgback.err
goto end
:icheck
IF %ierr%=="0" goto vcheck
ECHO "%isql%" error!>>pgback.err
goto end
:vcheck
IF %verr%=="0" goto start
ECHO "%vsql%" error!>>pgback.err
goto end
:zcheck
IF %zerr%=="0" goto start
ECHO "%myzip%" error!>>pgback.err
goto end
:start
set date_str=%date:~0,4%%date:~5,2%%date:~8,2%
if "%time:~0,1%"==" " (set time_str=0%time:~1,1%%time:~3,2%%time:~6,2%) ELSE (set time_str=%time:~0,2%%time:~3,2%%time:~6,2%)
set dbback_file=%back_dir%%iprefix%_%date_str%_%time_str%
rem pg备份
"%isql%" -i -h localhost -p5432 -F c -b -v -f "%dbback_file%.backup" %idb%
rem pg数据维护
"%vsql%" -h localhost -p5432 -d %idb% -q
rem 只保留指定个数备份,基本无必要压缩处理
rem For /F "SKIP=%inum%" %%i IN ('DIR "%back_dir%%iprefix%_*.backup" /B /TC /O-D') DO DEL "%back_dir%%%i" /Q
"%myzip%" a -ptjjtDs -t7z "%dbback_file%.7z" "%dbback_file%.backup" -m0=BCJ -m1=LZMA:d=21 -ms -mmt
For /F "SKIP=%inum%" %%i IN ('DIR "%back_dir%%iprefix%_*.7z" /B /TC /O-D') DO DEL "%back_dir%%%i" /Q
del "%dbback_file%.backup" /Q
:end
rem 变量处理
set PGUSER=
set PGPASSWORD=
set inum=
set iprefix=
set back_dir=
set isql=
set vsql=
set myzip=
set date_str=
set time_str=
set dbback_file= |
|