第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 常见的备份策略
- 每日完全备份:适合小型数据库,RPO为24小时
- 每周完全备份 + 每日增量备份:适合中型数据库,RPO为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 练习题
- 什么是物理备份?物理备份的特点是什么?
- 物理备份与逻辑备份的区别是什么?
- 物理备份有哪些类型?请简要描述每种类型的特点。
- 冷备份和热备份的区别是什么?它们的适用场景分别是什么?
- 增量备份和差异备份的区别是什么?它们的恢复过程有什么不同?
- 如何使用gs_basebackup进行openGauss数据库的热备份?
- 如何配置WAL日志归档?
- 如何进行时间点恢复?
- 备份策略设计的原则是什么?
- 灾难恢复计划的内容包括哪些?
