《PostgreSQL指南--内幕探索》第十章 基础备份与时间点恢复

在线数据库备份大致可分为逻辑备份和物理备份两类,它们各自都有优点和缺点。逻辑备份有一个缺点,即执行需要花费大量的时间。特别是对于大型数据库而言,需要花费很长时间进行备份,而从备份数据中恢复数据库可能需要更长的时间。相反,物理备份可以在相对较短的时间内备份和恢复大型数据库,因此在实际系统中,其是一个非常重要且实用的功能。

在PostgreSQL中,自8.0版本开始提供了在线的全量物理备份,整个数据库集簇(即物理备份数据)的运行时快照被称为基础备份。

PostgreSQL还在8.0版中引入了时间点恢复(Point-In-Time Recovery,PITR)。这一功能可以将数据库恢复至任意时间点,这通过使用一个基础备份和由持续归档生成的归档日志来实现。例如,即使你犯了一个严重的错误(如TRUNCATE所有的表),此功能还可以将数据库恢复至错误发生之前的时刻。
本章描述了以下内容:

  • 基础备份
  • 时间点恢复(PITR)的工作原理
  • 时间线与时间线历史文件
  • 时间点恢复与时间线历史文件
基础备份

在这里插入图片描述
使用底层命令进行基础备份的标准过程上图所示,具体步骤如下:

  • 发出pg_start_backup命令。
  • 使用你想用的归档命令获取数据库集簇的快照。
  • 发出pg_stop_backup命令。

这个简单的过程对于DBA来说很容易操作,因为它不需要特殊工具,只需要常用工具(如复制命令或类似的归档工具)来创建基本备份。此外,在此过程中,不需要获取表上的锁,所有用户都可以在不受备份操作影响的情况下发起查询。相对于其他开源的关系型数据库,这是一个巨大的优势。

更简单的方式是使用pg_basebackup命令来做基础备份,不过在其内部也是使用这些底层命令来工作的。

这些命令对显然是理解PITR的关键点之一,我们将在后续章节中探讨它们。

pg_start_backup

pg_start_backup开始为制作基础备份进行准备工作。恢复过程从重做点开始,因此pg_start_backup必须执行检查点,以便在制作基础备份的开始时刻显式创建一个重做点。此外,这次检查点的位置必须保存在非pg_control的其他文件中,因为在备份期间可能会执行多次常规检查点。

pg_start_backup执行下列4个操作:

  • 强制进入整页写入模式。
  • 切换到当前的WAL段文件(8.4或更高版本)。
  • 执行检查点。
  • 创建backup_label文件 —— 该文件创建于基本目录顶层中,包含有关该基本备份本身的关键信息,如检查点的检查点位置。

第3个和第4个操作是该命令的核心。第1和第2个操作是为了更可靠地恢复数据库集簇。

备份标签backup_label文件包含以下7个项目:

  • 检查点位置 —— 该命令所创建检查点的LSN位置。
  • WAL开始位置——这不是给PITR用的,而是为第11章描述的流复制准备的。它被命名为START WAL LOCATION,因为复制模式下的备用服务器在初始启动时只读取一次该值。
  • 备份方法——这是用于进行此基本备份的方法,如pg_start_backup或pg_basebackup。
  • 备份来源 —— 说明此备份是从主库还是备库拉取。
  • 开始时间 —— 这是执行pg_start_backup时的时间戳。
  • 备份标签 —— 这是pg_start_backup中指定的标签。
  • 开始时间线 —— 这是备份开始的时间线,为了进行正常的检查,在版本11.0中被引入。
备份标签

一个9.6版本中备份标签的实际例子如下所示:

postgres> cat /usr/local/pgsql/data/backup_label 
START WAL LOCATION: 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值