Lazy loaded image
20_数据库物理备份和恢复
Words 4455Read Time 12 min
2025-12-11

第20章 数据库物理备份和恢复

20.1 物理备份概述

20.1.1 物理备份的概念

物理备份(Physical Backup)是指直接复制数据库的物理文件,包括数据文件、日志文件、控制文件等。物理备份是数据库备份的重要组成部分,适用于大规模数据库和需要快速恢复的场景。

20.1.2 物理备份的特点

  • 备份速度快:直接复制物理文件,不需要解析SQL语句
  • 恢复速度快:直接恢复物理文件,不需要重新执行SQL语句
  • 占用空间大:备份文件包含完整的数据库物理文件
  • 跨平台性差:备份文件与数据库版本和操作系统相关
  • 适用于大规模数据库:对于TB级别的数据库,物理备份是唯一可行的方案

20.1.3 物理备份与逻辑备份的区别

特性
物理备份
逻辑备份
备份对象
物理文件
数据库对象(表、视图、存储过程等)
备份速度
恢复速度
占用空间
跨平台性
备份粒度
数据库或表空间
数据库、表或对象
适用场景
大规模数据库、快速恢复
小规模数据库、跨平台迁移

20.2 物理备份的类型

20.2.1 按备份方式分类

20.2.1.1 冷备份(Cold Backup)

冷备份是指在数据库关闭状态下进行的备份,也称为脱机备份。
优点: - 备份过程简单,不需要复杂的工具 - 备份文件一致性好,不会出现数据不一致的问题 - 恢复过程简单,直接复制文件即可
缺点: - 需要关闭数据库,影响业务连续性 - 备份窗口长,不适用于7×24小时运行的系统

20.2.1.2 热备份(Hot Backup)

热备份是指在数据库运行状态下进行的备份,也称为联机备份。
优点: - 不需要关闭数据库,不影响业务连续性 - 备份窗口短,适用于7×24小时运行的系统 - 可以进行增量备份和差异备份
缺点: - 备份过程复杂,需要使用专业的备份工具 - 备份文件一致性需要通过日志恢复来保证 - 对系统性能有一定影响

20.2.1.3 温备份(Warm Backup)

温备份是指在数据库处于只读状态下进行的备份,介于冷备份和热备份之间。
优点: - 备份文件一致性好 - 不需要完全关闭数据库
缺点: - 数据库需要处于只读状态,影响写入操作 - 适用场景有限

20.2.2 按备份范围分类

20.2.2.1 完全备份(Full Backup)

完全备份是指备份数据库的所有物理文件,包括数据文件、日志文件、控制文件等。
优点: - 恢复简单,只需要恢复完全备份即可 - 恢复速度快
缺点: - 备份时间长 - 占用空间大 - 备份频率低,数据丢失风险高

20.2.2.2 增量备份(Incremental Backup)

增量备份是指备份从上一次备份以来发生变化的数据文件。
优点: - 备份时间短 - 占用空间小 - 备份频率高,数据丢失风险低
缺点: - 恢复复杂,需要恢复完全备份和所有增量备份 - 恢复速度慢

20.2.2.3 差异备份(Differential Backup)

差异备份是指备份从上一次完全备份以来发生变化的数据文件。
优点: - 备份时间比完全备份短 - 恢复比增量备份简单,只需要恢复完全备份和最新的差异备份
缺点: - 占用空间比增量备份大 - 备份频率比增量备份低

20.2.3 备份策略组合

常见的备份策略组合: - 完全备份 + 增量备份 - 完全备份 + 差异备份 - 完全备份 + 增量备份 + 日志备份

20.3 物理备份的方法

20.3.1 冷备份的方法

20.3.1.1 手动冷备份

手动冷备份的步骤: 1. 关闭数据库 2. 复制数据库的所有物理文件到备份目录 3. 启动数据库
示例

20.3.1.2 使用工具进行冷备份

可以使用数据库提供的工具进行冷备份,如openGauss的gs_backup工具。
示例

20.3.2 热备份的方法

20.3.2.1 使用数据库自带工具

大多数数据库都提供了热备份工具,如openGauss的gs_basebackup、PostgreSQL的pg_basebackup等。
示例:使用gs_basebackup进行热备份
参数说明: - -D:备份目录 - -F p:备份格式为plain(普通文件) - -X stream:流式备份WAL日志 - -v: verbose模式,显示详细信息 - -P:显示进度

20.3.2.2 使用第三方备份工具

可以使用第三方备份工具进行热备份,如Veritas NetBackup、IBM Tivoli Storage Manager等。

20.3.3 增量备份和差异备份的方法

20.3.3.1 使用WAL日志进行增量备份

在PostgreSQL和openGauss中,可以通过备份WAL日志来实现增量备份。
示例:配置WAL日志归档

20.3.3.2 使用数据库自带工具进行增量备份

一些数据库提供了增量备份工具,如openGauss的gs_incrementalbackup。
示例:使用gs_incrementalbackup进行增量备份

20.4 物理恢复的类型

20.4.1 完全恢复(Complete Recovery)

完全恢复是指将数据库恢复到故障发生时的状态,包括恢复完全备份和所有后续的增量备份和日志。

20.4.2 不完全恢复(Incomplete Recovery)

不完全恢复是指将数据库恢复到指定的时间点或指定的日志位置,也称为时间点恢复(Point-in-Time Recovery,PITR)。

20.4.3 表空间恢复(Tablespace Recovery)

表空间恢复是指只恢复指定的表空间,而不是整个数据库。

20.4.4 页级恢复(Page-Level Recovery)

页级恢复是指只恢复损坏的数据页,而不是整个数据库或表空间。

20.5 物理恢复的方法

20.5.1 冷备份的恢复方法

20.5.1.1 手动冷备份恢复

手动冷备份恢复的步骤: 1. 关闭数据库 2. 删除或重命名当前的数据库文件 3. 复制备份文件到数据库目录 4. 启动数据库
示例

20.5.1.2 使用工具进行冷备份恢复

使用数据库提供的工具进行冷备份恢复,如openGauss的gs_backup工具。
示例

20.5.2 热备份的恢复方法

20.5.2.1 使用gs_basebackup进行热备份恢复

使用gs_basebackup进行热备份恢复的步骤: 1. 关闭数据库 2. 删除或重命名当前的数据库文件 3. 复制热备份文件到数据库目录 4. 创建recovery.conf文件 5. 启动数据库,进行恢复 6. 恢复完成后,删除recovery.conf文件
示例

20.5.2.2 时间点恢复(PITR)

时间点恢复是指将数据库恢复到指定的时间点,需要使用WAL日志。
示例

20.5.3 增量备份和差异备份的恢复方法

20.5.3.1 完全备份 + 增量备份恢复

恢复步骤: 1. 恢复完全备份 2. 按顺序恢复所有增量备份 3. 恢复WAL日志(如果需要) 4. 启动数据库
示例

20.5.3.2 完全备份 + 差异备份恢复

恢复步骤: 1. 恢复完全备份 2. 恢复最新的差异备份 3. 恢复WAL日志(如果需要) 4. 启动数据库
示例

20.6 物理备份和恢复的最佳实践

20.6.1 备份策略设计

20.6.1.1 根据业务需求设计备份策略

  • RTO(恢复时间目标):决定备份类型和恢复方法
  • RPO(恢复点目标):决定备份频率和备份类型
  • 业务连续性要求:决定是否使用热备份

20.6.1.2 常见的备份策略

  1. 每日完全备份:适合小型数据库,RPO为24小时
  1. 每周完全备份 + 每日增量备份:适合中型数据库,RPO为1小时
  1. 每周完全备份 + 每日差异备份 + 每小时日志备份:适合大型数据库,RPO为15分钟

20.6.2 备份存储管理

20.6.2.1 备份存储位置

  • 本地存储:速度快,但存在单点故障风险
  • 远程存储:安全性高,但速度慢
  • 云存储:弹性扩展,但成本高

20.6.2.2 备份存储介质

  • 磁盘:速度快,适合频繁访问的备份
  • 磁带:成本低,适合长期归档的备份
  • 云存储:弹性扩展,适合异地备份

20.6.2.3 备份文件的命名和组织

  • 使用时间戳命名备份文件,便于识别和管理
  • 按备份类型和时间组织备份目录
  • 定期清理过期的备份文件
示例:备份目录结构

20.6.3 备份验证和测试

20.6.3.1 备份验证

定期验证备份文件的完整性和可用性,可以使用数据库提供的工具进行验证。
示例:使用pg_restore验证备份文件

20.6.3.2 恢复测试

定期进行恢复测试,确保备份文件可以成功恢复。
恢复测试步骤: 1. 在测试环境中恢复备份文件 2. 验证数据库的完整性和一致性 3. 验证业务功能是否正常 4. 记录恢复时间和过程

20.6.4 备份监控和告警

20.6.4.1 备份监控

监控备份任务的执行情况,包括: - 备份是否成功完成 - 备份时间是否正常 - 备份文件大小是否正常 - 备份存储是否充足

20.6.4.2 备份告警

设置备份告警,当备份失败或出现异常时,及时通知管理员。

20.6.5 灾难恢复计划

20.6.5.1 灾难恢复计划的内容

  • 灾难恢复的目标和范围
  • 灾难恢复的角色和职责
  • 灾难恢复的流程和步骤
  • 灾难恢复的测试和演练
  • 灾难恢复的联系方式和沟通渠道

20.6.5.2 异地备份

将备份文件存储到异地,防止本地灾难导致备份文件丢失。
示例:使用rsync进行异地备份

20.7 综合示例:openGauss数据库物理备份和恢复

20.7.1 环境准备

  • 数据库版本:openGauss 3.0
  • 数据库目录:/data/gaussdb/data
  • 备份目录:/backup
  • WAL日志目录:/backup/wal

20.7.2 配置WAL日志归档

20.7.2.1 修改postgresql.conf文件

20.7.2.2 重启数据库使配置生效

20.7.3 执行热备份

20.7.3.1 使用gs_basebackup进行热备份

20.7.4 执行增量备份(WAL日志备份)

WAL日志会自动归档到/backup/wal目录,不需要手动执行。

20.7.5 模拟数据库故障

20.7.6 恢复数据库

20.7.6.1 关闭数据库

20.7.6.2 清理数据库目录

20.7.6.3 恢复热备份

20.7.6.4 创建recovery.conf文件

20.7.6.5 启动数据库进行恢复

20.7.6.6 验证恢复结果

20.7.6.7 删除recovery.conf文件

20.8 常见问题与解决方案

20.8.1 问题1:备份速度慢

  • 原因:备份设备IO性能不足、网络带宽有限、数据库负载过高
  • 解决方案:使用更高性能的备份设备、增加网络带宽、在低峰期进行备份

20.8.2 问题2:恢复时间长

  • 原因:恢复数据量大、恢复设备IO性能不足、需要恢复多个备份文件
  • 解决方案:使用更高性能的恢复设备、优化备份策略(如使用差异备份代替增量备份)、增加恢复并行度

20.8.3 问题3:备份文件损坏

  • 原因:存储介质故障、备份过程中断、病毒感染
  • 解决方案:定期验证备份文件、使用RAID存储、在备份过程中避免中断、安装杀毒软件

20.8.4 问题4:WAL日志丢失

  • 原因:归档目录空间不足、归档命令失败、手动删除WAL日志
  • 解决方案:监控归档目录空间、检查归档命令执行情况、不要手动删除WAL日志、定期清理过期的WAL日志

20.8.5 问题5:恢复后数据库无法启动

  • 原因:恢复过程中断、备份文件不完整、recovery.conf配置错误
  • 解决方案:检查恢复过程日志、验证备份文件完整性、检查recovery.conf配置

20.9 小结

物理备份是数据库备份的重要组成部分,具有备份速度快、恢复速度快的优点,适用于大规模数据库和需要快速恢复的场景。本章介绍了物理备份的概念、类型、方法,以及物理恢复的类型、方法和最佳实践。
在实际应用中,需要根据业务需求设计合适的备份策略,包括备份类型、备份频率、备份存储位置等。同时,还需要定期验证备份文件的完整性和可用性,进行恢复测试,确保在数据库发生故障时能够快速恢复。
物理备份和恢复是数据库管理员的重要技能,掌握物理备份和恢复的方法和最佳实践,对于保证数据库的安全性和可靠性至关重要。

20.10 练习题

  1. 什么是物理备份?物理备份的特点是什么?
  1. 物理备份与逻辑备份的区别是什么?
  1. 物理备份有哪些类型?请简要描述每种类型的特点。
  1. 冷备份和热备份的区别是什么?它们的适用场景分别是什么?
  1. 增量备份和差异备份的区别是什么?它们的恢复过程有什么不同?
  1. 如何使用gs_basebackup进行openGauss数据库的热备份?
  1. 如何配置WAL日志归档?
  1. 如何进行时间点恢复?
  1. 备份策略设计的原则是什么?
  1. 灾难恢复计划的内容包括哪些?
上一篇
openGauss数据库
下一篇
openGauss数据库
Catalog