1. 首页 > 国产数据库教程 > openGauss教程 > 正文

opengauss教程FG020-openGauss备份与恢复基础

目录大纲

Part01-基础概念与理论知识

1.1 备份概述

备份是数据库管理中非常重要的环节,了解备份的概念和方法对于数据库的安全和可靠性至关重要。风哥教程参考opengauss官方文档,备份具有以下特点:

  • 数据保护:备份可以保护数据免受意外删除、硬件故障、自然灾害等因素的影响
  • 灾难恢复:在发生灾难时,备份可以用于恢复数据库到正常状态
  • 数据迁移:备份可以用于将数据从一个环境迁移到另一个环境
  • 数据归档:备份可以用于归档历史数据

1.2 恢复概述

恢复是指将数据库从备份中恢复到正常状态的过程,了解恢复的概念和方法对于数据库的安全和可靠性至关重要:

  • 完全恢复:将数据库恢复到备份时的状态
  • 时间点恢复:将数据库恢复到指定的时间点
  • 增量恢复:在全量备份的基础上,应用增量备份进行恢复
  • 闪回恢复:使用闪回技术将数据库恢复到之前的状态

1.3 备份策略

备份策略是指根据业务需求和数据重要性制定的备份计划,包括:

  • 全量备份:备份整个数据库
  • 增量备份:备份自上次备份以来发生变化的数据
  • 差异备份:备份自上次全量备份以来发生变化的数据
  • 备份频率:根据数据变化频率和业务需求确定备份频率
  • 备份存储:选择合适的存储介质和位置
  • 备份验证:定期验证备份的有效性

风哥提示:制定合理的备份策略是数据库管理的重要环节,直接影响数据库的安全性和可靠性。

Part02-生产环境规划与建议

2.1 备份规划

生产环境备份规划建议

  • 备份类型
    • 全量备份:每周一次
    • 增量备份:每天一次
    • 差异备份:每两天一次
  • 备份时间
    • 选择业务低峰期进行备份
    • 避免在系统负载高时进行备份
  • 备份方式
    • 物理备份:使用gs_basebackup工具
    • 逻辑备份:使用gs_dump和gs_dumpall工具
  • 备份验证
    • 定期验证备份的有效性
    • 测试恢复过程

2.2 恢复规划

生产环境的恢复规划建议:

  • 恢复策略
    • 制定详细的恢复计划
    • 明确恢复步骤和责任人
    • 定期演练恢复过程

    风哥提示:

  • 恢复时间目标(RTO)
    • 根据业务需求确定RTO
    • 确保备份策略能够满足RTO要求
  • 恢复点目标(RPO)
    • 根据业务需求确定RPO
    • 确保备份策略能够满足RPO要求
  • 恢复测试
    • 定期进行恢复测试
    • 验证恢复过程的有效性

2.3 存储规划

备份存储规划建议:

  • 存储介质
    • 使用高性能存储
    • 考虑使用云存储
    • 使用冗余存储

    学习交流加群风哥微信: itpux-com

  • 存储位置
    • 异地存储:防止本地灾难
    • 多副本存储:提高可靠性
  • 存储管理
    • 定期清理过期备份
    • 监控存储空间使用情况
    • 实施备份轮换策略

Part03-生产环境项目实施方案

3.1 备份操作

# 全量物理备份
[opengauss@fgedu.net.cn ~]$ gs_basebackup -D /opengauss/backup/full -h 192.168.1.100 -p 5432 -U opengauss -F p -X stream
Password:
gs_basebackup: initiating base backup, waiting for checkpoint to complete
gs_basebackup: checkpoint completed
gs_basebackup: write-ahead log start point: 0/12345678
gs_basebackup: write-ahead log end point: 0/12345678
gs_basebackup: base backup completed, pg_wal directory size: 16 MB
# 逻辑备份(数据库级)
[opengauss@fgedu.net.cn ~]$ gs_dump -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -f /opengauss/backup/fgedudb_backup.sql
Password:
gs_dump: last built-in OID is 16383
gs_dump: reading extensions
gs_dump: identifying extension members
gs_dump: reading schemas
gs_dump: reading user-defined tables
gs_dump: reading user-defined functions
gs_dump: reading user-defined types
gs_dump: reading procedural languages
gs_dump: reading user-defined aggregate functions
学习交流加群风哥QQ113257174
gs_dump: reading user-defined operators
gs_dump: reading user-defined operator classes
gs_dump: reading user-defined operator families
gs_dump: reading user-defined text search parsers
gs_dump: reading user-defined text search templates
gs_dump: reading user-defined text search dictionaries
gs_dump: reading user-defined text search configurations
gs_dump: reading user-defined foreign-data wrappers
gs_dump: reading user-defined foreign servers
gs_dump: reading default privileges
gs_dump: reading user-defined collations
gs_dump: reading user-defined conversions
gs_dump: reading user-defined transforms
gs_dump: reading user-defined domains
gs_dump: reading sequences
gs_dump: reading table data
gs_dump: reading extensible attributes
gs_dump: reading indexes
gs_dump: reading constraints
gs_dump: reading triggers
gs_dump: reading rewrite rules
gs_dump: writing COPY commands
gs_dump: writing INSERT commands
gs_dump: writing function definitions
gs_dump: writing type definitions
gs_dump: writing operator definitions
gs_dump: writing operator class definitions
gs_dump: writing operator family definitions
gs_dump: writing text search parser definitions
gs_dump: writing text search template definitions
gs_dump: writing text search dictionary definitions
gs_dump: writing text search configuration definitions
gs_dump: writing foreign-data wrapper definitions
gs_dump: writing foreign server definitions
gs_dump: writing default privileges
gs_dump: writing event trigger definitions
gs_dump: dumping contents of global objects
gs_dump: dumping contents of database objects
gs_dump: dump completed successfully
# 逻辑备份(全库级)
更多视频教程www.fgedu.net.cn
[opengauss@fgedu.net.cn ~]$ gs_dumpall -h 192.168.1.100 -p 5432 -U opengauss -f /opengauss/backup/full_backup.sql
Password:
gs_dumpall: dump all databases
gs_dumpall: dump completed successfully

3.2 恢复操作

# 物理备份恢复
[opengauss@fgedu.net.cn ~]$ gs_ctl stop -D /opengauss/fgdata
waiting for server to shut down…. done
server stopped
[opengauss@fgedu.net.cn ~]$ rm -rf /opengauss/fgdata/*
[opengauss@fgedu.net.cn ~]$ cp -r /opengauss/backup/full/* /opengauss/fgdata/
[opengauss@fgedu.net.cn ~]$ gs_ctl start -D /opengauss/fgdata
waiting for server to start…. done
server started
# 逻辑备份恢复
[opengauss@fgedu.net.cn ~]$ gsql -h 192.168.1.100 -p 5432 -U opengauss -d postgres -f /opengauss/backup/fgedudb_backup.sql
Password:
SET
SET
SET
SET
SET
SET
SET
SET
CREATE SCHEMA
ALTER SCHEMA
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
COPY 4
COPY 3
COPY 3
CREATE INDEX
更多学习教程公众号风哥教程itpux_com
CREATE INDEX
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE

3.3 备份管理

# 备份脚本示例
[opengauss@fgedu.net.cn ~]$ cat /opengauss/scripts/backup.sh
#!/bin/bash
# backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 备份目录
BACKUP_DIR=”/opengauss/backup”
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR/full/$DATE

# 全量物理备份
gs_basebackup -D $BACKUP_DIR/full/$DATE -h 192.168.1.100 -p 5432 -U opengauss -F p -X stream

# 逻辑备份
gs_dump -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -f $BACKUP_DIR/logical/fgedudb_$DATE.sql

from DB视频:www.itpux.com
# 清理7天前的备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
# 执行备份脚本
[opengauss@fgedu.net.cn ~]$ chmod +x /opengauss/scripts/backup.sh
[opengauss@fgedu.net.cn ~]$ /opengauss/scripts/backup.sh
Password:
gs_basebackup: initiating base backup, waiting for checkpoint to complete
gs_basebackup: checkpoint completed
gs_basebackup: write-ahead log start point: 0/12345678
gs_basebackup: write-ahead log end point: 0/12345678
gs_basebackup: base backup completed, pg_wal directory size: 16 MB
Password:
gs_dump: last built-in OID is 16383
gs_dump: reading extensions
gs_dump: identifying extension members
gs_dump: reading schemas
gs_dump: reading user-defined tables
gs_dump: reading user-defined functions
gs_dump: reading user-defined types
gs_dump: reading procedural languages
gs_dump: reading user-defined aggregate functions
gs_dump: reading user-defined operators
gs_dump: reading user-defined operator classes
gs_dump: reading user-defined operator families
gs_dump: reading user-defined text search parsers
gs_dump: reading user-defined text search templates
gs_dump: reading user-defined text search dictionaries
gs_dump: reading user-defined text search configurations
gs_dump: reading user-defined foreign-data wrappers
gs_dump: reading user-defined foreign servers
gs_dump: reading default privileges
gs_dump: reading user-defined collations
gs_dump: reading user-defined conversions
gs_dump: reading user-defined transforms
gs_dump: reading user-defined domains
gs_dump: reading sequences
gs_dump: reading table data
gs_dump: reading extensible attributes
gs_dump: reading indexes
gs_dump: reading constraints
gs_dump: reading triggers
gs_dump: reading rewrite rules
gs_dump: writing COPY commands
gs_dump: writing INSERT commands
gs_dump: writing function definitions
gs_dump: writing type definitions
gs_dump: writing operator definitions
gs_dump: writing operator class definitions
gs_dump: writing operator family definitions
gs_dump: writing text search parser definitions
gs_dump: writing text search template definitions
gs_dump: writing text search dictionary definitions
gs_dump: writing text search configuration definitions
gs_dump: writing foreign-data wrapper definitions
gs_dump: writing foreign server definitions
gs_dump: writing default privileges
gs_dump: writing event trigger definitions
gs_dump: dumping contents of global objects
gs_dump: dumping contents of database objects
gs_dump: dump completed successfully

Part04-生产案例与实战讲解

4.1 全量备份与恢复

# 全量物理备份
[opengauss@fgedu.net.cn ~]$ gs_basebackup -D /opengauss/backup/full/20240101 -h 192.168.1.100 -p 5432 -U opengauss -F p -X stream
Password:
gs_basebackup: initiating base backup, waiting for checkpoint to complete
gs_basebackup: checkpoint completed
gs_basebackup: write-ahead log start point: 0/12345678
gs_basebackup: write-ahead log end point: 0/12345678
gs_basebackup: base backup completed, pg_wal directory size: 16 MB
# 模拟数据库故障
[opengauss@fgedu.net.cn ~]$ gs_ctl stop -D /opengauss/fgdata
waiting for server to shut down…. done
server stopped
[opengauss@fgedu.net.cn ~]$ rm -rf /opengauss/fgdata/*
# 恢复数据库
[opengauss@fgedu.net.cn ~]$ cp -r /opengauss/backup/full/20240101/* /opengauss/fgdata/
[opengauss@fgedu.net.cn ~]$ gs_ctl start -D /opengauss/fgdata
waiting for server to start…. done
server started
# 验证恢复结果
[opengauss@fgedu.net.cn ~]$ gsql -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -c “SELECT count(*) FROM fgedu_employee;

Password:
count
——-
4
(1 row)

4.2 增量备份与恢复

# 全量备份
[opengauss@fgedu.net.cn ~]$ gs_basebackup -D /opengauss/backup/full/20240101 -h 192.168.1.100 -p 5432 -U opengauss -F p -X stream
Password:
gs_basebackup: initiating base backup, waiting for checkpoint to complete
gs_basebackup: checkpoint completed
gs_basebackup: write-ahead log start point: 0/12345678
gs_basebackup: write-ahead log end point: 0/12345678
gs_basebackup: base backup completed, pg_wal directory size: 16 MB
# 插入新数据
[opengauss@fgedu.net.cn ~]$ gsql -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -c “INSERT INTO fgedu_employee (name, age, dept_id, salary) VALUES (‘Sun Qi’, 28, 1, 8000.00);

Password:
INSERT 0 1
# 增量备份(使用WAL归档)
[opengauss@fgedu.net.cn ~]$ gs_ctl reload -D /opengauss/fgdata
server signaled
# 模拟数据库故障
[opengauss@fgedu.net.cn ~]$ gs_ctl stop -D /opengauss/fgdata
waiting for server to shut down…. done
server stopped
[opengauss@fgedu.net.cn ~]$ rm -rf /opengauss/fgdata/*
# 恢复全量备份
[opengauss@fgedu.net.cn ~]$ cp -r /opengauss/backup/full/20240101/* /opengauss/fgdata/
# 应用WAL日志进行增量恢复
[opengauss@fgedu.net.cn ~]$ gs_ctl start -D /opengauss/fgdata -R
waiting for server to start…. done
server started
# 验证恢复结果
[opengauss@fgedu.net.cn ~]$ gsql -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -c “SELECT count(*) FROM fgedu_employee;

Password:
count
——-
5
(1 row)

4.3 备份策略实战

# 创建备份策略脚本
[opengauss@fgedu.net.cn ~]$ cat /opengauss/scripts/backup_strategy.sh
#!/bin/bash
# backup_strategy.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 备份目录
BACKUP_DIR=”/opengauss/backup”
DATE=$(date +%Y%m%d)
WEEKDAY=$(date +%u)

# 创建备份目录
mkdir -p $BACKUP_DIR/full
mkdir -p $BACKUP_DIR/incremental
mkdir -p $BACKUP_DIR/logical

# 全量备份(每周日)
if [ $WEEKDAY -eq 7 ]; then
echo “Performing full backup…”
gs_basebackup -D $BACKUP_DIR/full/$DATE -h 192.168.1.100 -p 5432 -U opengauss -F p -X stream
gs_dump -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -f $BACKUP_DIR/logical/fgedudb_full_$DATE.sql
# 增量备份(其他天)
else
echo “Performing incremental backup…”
# 这里使用WAL归档作为增量备份
gs_ctl reload -D /opengauss/fgdata
gs_dump -h 192.168.1.100 -p 5432 -U opengauss -d fgedudb -f $BACKUP_DIR/logical/fgedudb_incremental_$DATE.sql
fi

# 清理30天前的备份
find $BACKUP_DIR/full -type d -mtime +30 -exec rm -rf {} \;
find $BACKUP_DIR/logical -name “*.sql” -mtime +30 -exec rm -f {} \;
# 设置定时任务
[opengauss@fgedu.net.cn ~]$ crontab -e
# 每天凌晨2点执行备份
0 2 * * * /opengauss/scripts/backup_strategy.sh >> /opengauss/logs/backup.log 2>&1

Part05-风哥经验总结与分享

5.1 备份与恢复最佳实践

  • 备份策略
    • 制定合理的备份策略,包括全量备份和增量备份
    • 选择合适的备份时间,避免业务高峰期
    • 定期验证备份的有效性
  • 备份方式
    • 物理备份和逻辑备份结合使用
    • 使用WAL归档实现增量备份
    • 考虑使用第三方备份工具
  • 恢复策略
    • 制定详细的恢复计划
    • 定期演练恢复过程
    • 确保恢复时间在RTO范围内
  • 存储管理
    • 使用异地存储防止本地灾难
    • 定期清理过期备份
    • 监控存储空间使用情况

5.2 性能优化要点

  • 备份性能优化
    • 使用并行备份提高速度
    • 选择合适的备份压缩方式
    • 使用增量备份减少备份时间和存储空间
  • 恢复性能优化
    • 使用并行恢复提高速度
    • 优化恢复参数
    • 使用快速恢复技术
  • 存储性能优化
    • 使用高性能存储设备
    • 优化存储I/O配置
    • 考虑使用SSD存储

5.3 常见问题与解决方案

常见备份与恢复问题及解决方法

  • 问题1:备份失败
    • 症状:备份过程中出现错误
    • 解决方案:检查数据库状态,确保数据库正常运行;检查备份目录权限;检查存储空间是否足够
  • 问题2:恢复失败
    • 症状:恢复过程中出现错误
    • 解决方案:检查备份文件是否完整;检查数据库目录权限;检查存储空间是否足够
  • 问题3:备份速度慢
    • 症状:备份过程耗时过长
    • 解决方案:使用并行备份;使用增量备份;优化存储I/O性能
  • 问题4:备份空间不足
    • 症状:备份过程中提示空间不足
    • 解决方案:清理过期备份;使用压缩备份;增加存储空间
  • 问题5:恢复时间过长
    • 症状:恢复过程耗时过长
    • 解决方案:使用并行恢复;优化恢复参数;使用快速恢复技术

风哥提示:备份与恢复是数据库管理的重要环节,直接关系到数据的安全性和可靠性。在生产环境中,应该制定合理的备份策略,选择合适的备份方式,定期验证备份的有效性,确保在发生灾难时能够快速恢复数据库。同时,应该注意备份的性能优化和存储空间管理,确保备份过程不会影响数据库的正常运行。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息