PostgreSQL 是一种强大的开源对象关系型数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可安全地存储和扩缩最复杂的数据工作负载。
Backup and DR 使用的 PostgreSQL 备份 API
卷级(Linux 更改块跟踪和 LVM 快照)备份: Backup and DR 在使用 Linux 更改块跟踪和 LVM 快照执行备份时,会使用 PostgreSQL
pg_start_backup(label)和pg_stop_backup()命令。完整 + 增量(基于文件的传统)备份:Backup and DR 使用 PostgreSQL
pg_dump基于文件的备份命令。pg_dump命令没有用于捕获数据库增量更改的选项,因此每个备份都是完整的数据库转储备份。数据库恢复会通过物理覆盖数据区域来恢复数据库。
PostgreSQL 日志备份:在日志备份期间,Backup and DR 会物理复制所有 PostgreSQL WAL (
WriteAheadLog)。如需清除日志, Backup and DR 会使用操作系统级命令。
工作原理:Backup and DR 基于卷的备份(使用 Linux CBT)
位图只会跟踪已更改的块:没有写入时复制,也没有 I/O 密集型操作。
以下步骤介绍了数据备份和恢复的过程:
Backup and DR 代理具有 CBT,用于跟踪数据库数据区域中已更改的块。
代理调用数据库 API 以冻结或暂停数据库以进行数据备份。
代理会创建数据库数据区域的 LVM 快照并合成位图。
代理调用数据库 API 以解冻数据库。
代理会将已更改的块复制到备份/恢复设备,然后该设备会删除快照并对备份进行编目。
该设备会发出内部快照并合成时间点虚拟完整备份。
对于数据恢复,Backup and DR 会立即装载可重写的暂存磁盘,并使数据库恢复在线。
对于卷级快照作业,系统会在主实例 上运行 quiesce 或 unquiesce 命令:
select pg_start_backup(<label>);
select pg_stop_backup();
对于卷级快照作业,系统会在备用节点 上运行 quiesce 和 unquiesce 命令:
如果 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();
工作原理:基于文件的备份
以下步骤介绍了如何使用基于文件的备份执行数据备份和恢复的过程:
Backup and DR 代理部署在数据库服务器中。
在数据库服务器上装载暂存磁盘。
使用转储备份命令调用完整备份,并将备份写入装载的磁盘。
Backup and DR 会创建内部快照。 日志备份以类似的方式直接从文件系统完成,并且可以按照您配置的任何时间表进行。
对于数据恢复,Backup and DR 会立即将暂存磁盘装载到数据库服务器,并启动数据库恢复操作。 数据库恢复后,日志可以播放到任何时间点。