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> 更改为要备份的数据库名称。
  • 保存文件
  • 一旦选择了任务将要运行的安全上下文,建议更改运行备份和存储文件的目录安全性,因为高层级用户名和密码以纯文本形式存储。
  • 另一种选择是修改 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 脚本。请记住,如果未恢复到相同的服务器设置,则表空间很可能无效,并会导致错误。