根据网上公布的批处理改写,在此感谢~
在Windows Server 2003 with SP2 x64上添加到任务计划中运行通过~
:: 备份文件命名规则: 数据库名_当前时间戳_数据库管理系统名.sql e.g. info_platform_20120503101305_PostgreSQL.sql
:: 使用WinRAR的命令行程序Rar.exe来压缩备份好的.sql文件,前提是系统上要安装有WinRAR而且在此处的路径正确!
:: @author libeely@gmail.com
@echo off
echo 正在初始化环境变量...
echo.
:: 对于路径中有空格的路径字符串,需要加上英文双引号包裹!否则就会出现命令错误!
set POSTGRESQL_DIR="E:\PostgreSQL\9.1\bin\"
:: "D:\MySQL\MySQL Server 5.5\bin\"
:: 数据库管理系统名
set DBMS_NAME=PostgreSQL
set DBBAK_DIR="G:\info_platform_databackup"
set UPLOADS_DIR="E:\apache\Apache2.2\wwwroot\info_platform\uploads\"
:: 异地备份目录
set DEST_DIR="\\10.30.100.22\info_form_databackup"
set WINRAR_DIR="C:\Program Files (x86)\WinRAR\"
set DB_NAME=info_platform
set USER="postgres"
:: PostgreSQL的pg_dump命令行工具没有带密码的参数,但是可以设置一个PGPASSWORD的环境变量来提供密码
set PGPASSWORD=123456
echo 正在备份数据库...
echo.
:: 以下是获得当前系统时间的命令,e.g. 20120503101305
:: 年
set myyy=%date:~0,4%
:: 月
set mymm=%date:~5,2%
:: 日
set mydd=%date:~8,2%
echo %myyy% %mymm% %mydd%
set /a TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
set _TIME=%time:~0,8%
::echo %_TIME%
set CURRENTTIME=%_time::=%
set CURRENTTIME=%CURRENTTIME: =0%
set MYDATETIME=%TODAY%%CURRENTTIME%
::echo %MYDATETIME%
E:
cd %POSTGRESQL_DIR%
:: 使用PostgreSQL提供的pg_dump命令将具体数据库导出为.sql文件
pg_dump -h localhost -p 5432 -U %USER% %DB_NAME% >%DBBAK_DIR%\%DB_NAME%_%MYDATETIME%_%DBMS_NAME%.sql
echo 正在压缩备份结果...
echo.
C:
cd %WINRAR_DIR%
:: 最好压缩(-m5)、固实压缩(-s)、从名称中排除路径(即不创建路径中包含的文件夹,-ep)
:: 压缩后删除文件到回收站(-dr)、压缩后删除文件(-df)
rar a %DBBAK_DIR%\%DB_NAME%_%MYDATETIME% %DBBAK_DIR%\%DB_NAME%_%MYDATETIME%_%DBMS_NAME%.sql -m5 -s -ep -dr
echo 正在复制压缩文件到异地...
xcopy %DBBAK_DIR%\*.* %DEST_DIR%$ /s /y
xcopy %UPLOADS_DIR%\*.* %DEST_DIR%$ /s /y
:: 删除生成的sql文件,不再启用,直接使用rar命令参数删除,更安全!
::echo 正在删除临时文件...
::del %DBBAK_DIR%\%DB_NAME%_*.sql
:: 按任意键退出
::PAUSE
exit