Windows 上的自动备份
来自 PostgreSQL wiki
跳转到导航跳转到搜索
Windows 上的自动备份
更新以反映从 8.3 到 11 的更改
- 此方法使用 pg_dump.exe 以及一个批处理文件来调用它。此批处理文件将为每天运行的日期创建一个文件/目录。
- 请记住 pg_dump 和 pg_dumpall 是特定于版本的,这意味着不要使用 9.3 的 pg_dump 来备份 11.0 版本。选项 -i 和 --ignore-version 被忽略
运行 pg_dump 和 pg_dumpall 所需的文件
- 要获取 pg_dump、pg_dumpall 二进制文件,必须从 PostgreSQL 服务器安装中提取它、编译它或从 EDB 下载二进制文件。没有包可以只获取这些文件。
- 应从 Microsoft 下载并安装适用于正在使用的 Postgresql 版本的 Windows C/C++ 运行时库,版本 11.0 使用 VS-2013
- 转到备份服务器/位置创建一个名为 Drive:\PostgresqlBack 的目录,然后在 Drive:\PostgresqlBack 中创建一个名为“bin”的子目录,并将以下文件放置在此目录中。
libeay32.dll
libiconv-2.dll
libintl-8.dll
libintl-9.dll
libpg.dll
libwinpthread-1.dll
msvr120.dll
pg_dump.exe
pg_dumpall.exe
ssleay32.dll
zlib1.dll
使用 pgdump,每天创建一个新文件
- 创建一个名为 postgresqlBackup.bat 的批处理文件。该文件必须位于 PostgresqlBack 目录中,而不是 bin 文件夹中。
- 打开文件,然后复制/粘贴以下内容
@echo off
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
set datestr=%month%_%day%_%year%
echo datestr is %datestr%
set BACKUP_FILE=<NameOfTheFile>_%datestr%.backup
echo backup file name is %BACKUP_FILE%
SET PGPASSWORD=<PassWord>
echo on
bin\pg_dump -h <HostName> -p 5432 -U <UserName> -F c -b -v -f %BACKUP_FILE% <DATABASENAME>
- 将 <NameOfTheFile> 更改为其他内容。一个想法是使用数据库的名称。(确保在单词 BACKUP_FILE 后没有空格,任何空格都会导致此设置无法正常工作。)设置是文件名的第一部分,然后是创建文件的日期,扩展名为 .backup
- 将上面的 <PassWord > 设置更改为备份用户的正确密码。(确保在单词 PGPASSWORD 后没有空格,任何空格都会导致此设置无法正常工作。有关 pgPassword 的描述
- 将 <HostName> 更改为托管 Postgresql 的服务器的 IP 地址或 DNS 名称。
- 将 <UserName> 更改为备份用户,确保此用户有权访问用于备份目的的数据库
- 将 <DATABASENAME> 更改为要备份的数据库名称。
- 保存文件
- 为 MS 任务计划程序 创建任务
- 一旦选择了任务将要运行的安全上下文,建议更改运行备份和存储文件的目录安全性,因为高层级用户名和密码以纯文本形式存储。
- 另一种选择是修改 pg_hba.conf 文件,将备份服务器添加为受信任的连接
pg_dump 中从 9.1 开始的新功能
选项 -F d。这将备份从创建单个大型 TAR 文件更改为现在创建一个目录并包含每个表的单个文件。
pg_dump 命令如下所示
bin\pg_dump -h <HostName> -p 5432 -U <UserName> -F d -b -v -f %BACKUP_FILE% <DATABASENAME>
-F d 选项有一些优势。一是恢复速度可以显着提高,因为 pg_restore 选项可以运行并行连接,而不是一次一个表。二是使用此选项与 TAR 格式相比,提取特定表以恢复的速度更快。三是当复制/移动文件到异地时,如果在中途失败,则不必从头开始,这与一个大型 TAR 文件不同,对于大型数据库来说这是一个很大的优势。
使用 pg_dumpall
有必要使用 pg_dumpall 来获取登录/角色和模式信息,因为 pg_dump 不包含此信息
set BACKUP_FILE=Globals\Globals_%datestr%.backup.sql
echo backup file name is %BACKUP_FILE%
SET PGPASSWORD=<PassWord>
echo on
bin\pg_dumpall -g -h <HostName> -p 5432 -U <UserName> -v -f %BACKUP_FILE% <DATABASENAME>
这将创建一个用于恢复角色和模式信息的 SQL 脚本。请记住,如果未恢复到相同的服务器设置,则表空间很可能无效,并会导致错误。