PostgreSQL 备份和灾难恢复服务

PostgreSQL 是一种功能强大的开源对象关系型数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可安全地存储和扩缩最复杂的数据工作负载。

Backup and DR 使用的 PostgreSQL 备份 API

  • 卷级(Linux 更改块跟踪和 LVM 快照)备份:使用 Linux 更改块跟踪和 LVM 快照执行备份时,备份和灾难恢复会使用 PostgreSQL pg_start_backup(label)pg_stop_backup() 命令。

  • 完整+增量(基于文件的传统)备份:备份和灾难恢复使用 PostgreSQL pg_dump 基于文件的备份命令。pg_dump 命令没有用于捕获数据库增量更改的选项,因此每次备份都是完整的数据库转储备份。

    数据库恢复是通过物理覆盖数据区域来恢复数据库的。

  • PostgreSQL 日志备份:在日志备份期间,备份和灾难恢复会实际复制所有 PostgreSQL WAL (WriteAheadLog)。如需清除日志,备份和灾难恢复会使用操作系统级命令。

运作方式:使用 Linux CBT 进行基于卷的备份和灾难恢复

位图中仅跟踪已更改的块:无写时复制,无密集 I/O 操作。

以下步骤描述了数据备份和恢复过程:

  1. 备份和灾难恢复代理具有 CBT,用于跟踪数据库数据区域中的更改块。

  2. 代理会调用数据库 API 来冻结或暂停数据库以进行数据备份。

  3. 代理创建数据库数据区域的 LVM 快照并合成位图。

  4. 代理调用数据库 API 以解冻数据库。

  5. 代理会将更改的块复制到备份/恢复设备,然后备份/恢复设备会删除快照并编制备份目录。

  6. 该设备会发出内部快照并合成时间点虚拟完整备份。

  7. 如需进行数据恢复,Backup and DR 会立即挂载可重写的暂存磁盘,并将数据库上线。

针对卷级快照作业,在主副本上运行暂停或取消暂停命令:

select pg_start_backup(<label>);
select pg_stop_backup();

系统会在卷级快照作业的待机节点上运行暂停和取消暂停命令:

如果 PostgreSQL 版本为 10.x 或更高版本:

select pg_wal_replay_pause();
select pg_wal_replay_resume();

如果 PostgreSQL 版本为 9.x:

select pg_xlog_replay_pause();
select pg_xlog_replay_resume();

运作方式:基于文件的备份

以下步骤介绍了如何使用基于文件的备份映像执行数据备份和恢复的过程:

  1. Backup and DR Agent 部署在数据库服务器中。

  2. 在数据库服务器上挂载暂存磁盘。

  3. 使用“转储备份”命令调用完整备份,将备份写入已挂载的磁盘。

  4. Backup and DR 会创建内部快照。日志备份会以类似的方式直接从文件系统执行,并且会按照您配置的任何时间表执行。

  5. 对于数据恢复,备份和灾难恢复会立即将暂存磁盘挂载到数据库服务器,并发起数据库恢复操作。在数据库恢复后,可以播放任意时间点的日志。

后续步骤

为备份和灾难恢复准备数据库

有关 PostgreSQL 备份和灾难恢复的其他文档