当前位置: fuhua-pet->postgres > postgresql技术大讲堂 - 第39讲:数据库完全恢复

postgresql技术大讲堂 - 第39讲:数据库完全恢复

2023-12-29作者:firstyuding来源:www.firstyuding.com


PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。


第39讲:数据库完全恢复


PostgreSQL第39讲:12月23日(周六)19:30,钉钉群(35822460)& 视频号(数据库老陈)直播

内容1:描述介质恢复

内容2:执行非归档模式下恢复

内容3:执行归档模式下完全恢复

内容4:执行基于表空间的完全恢复

内容5:执行只读数据库恢复


介质恢复

用于恢复丢失或损坏的当前数据文件或控制文件

需要显式调用

操作如下:

从备份中恢复文件

恢复的文件会应用归档日志和在线重做日志进行数据重构


恢复步骤


执行数据文件转储和恢复

使用操作系统命令tar/cp转储数据文件

使用pg_ctl start对数据文件进行恢复


非归档模式恢复

在非归档模式下,必须恢复数据目录下所有的文件和目录:

所有$PGDATA目录下的子目录 base、global、pg_wal...

所有$PGDATA目录下的文件 postgresql.conf、pg_hba.conf...


非归档模式恢复优缺点

优势

易于执行,出错风险低

恢复时间是转储所有文件所需的时间

缺点

数据丢失,必须手动重新应用

整个数据库将恢复到上一次完整关闭备份的位置


非归档模式恢复


归档模式恢复

完全恢复

使用wal数据或增量备份

将数据库更新到最新的时间点

应用所有wal日志记录的更改

不完全恢复

使用备份和wal日志生成数据库的非当前版本


完全恢复

确认数据库关闭

恢复数据文件

如果是全库备份,哪怕是损坏了一个数据文件,也要转储备份的所有数据文件

如果是单独表空间(除了global)备份,哪怕损坏了表空间下的一个数据文件,也要转储备份的所有数据文件

修改postgresql.conf文件

生成recovery.signal空文件

启动数据库(recovery)


归档模式完全恢复优缺点

优势

将所有数据恢复到最新点(故障点)

恢复时间是转储数据文件和应用所有归档日志文件所需的时间

缺点

必须具有自您要从中恢复的备份以来的所有归档日志文件


执行一个基于数据库备份的完全恢复

示例(恢复前备份pg_wal目录下所有文件)

1、使用tar包进行恢复

tar -zvxf /backup/base.tar.gz -C $PGDATA

2、修改postgresql.conf文件

restore_command = 'cp /home/postgres/archives/%f %p'

recovery_target_timeline = 'latest'

3、生成recovery.signal空文件

touch recovery.signal

4、启动数据库

pg_ctl start


时间线和时间线历史文件

timelineId(时间线)

每当做了一次完全或者不完全恢复后,数据库的时间线就会发生变化,意味着从失败点后重新开始新的生命轨迹,同时用时间线历史文件来记录。


timelineId 和 wal文件名关系

时间线的改变导致wal名字发生变化

当完成对数据库的恢复后,会产生新的wal文件,其命名规则为在原来的段文件名字中用新的时间线替换原来的时间线,其它不变。


时间线和时间线历史文件

Timeline History File

历史文件会在pg_wal中生成,同时复制到归档目录下,命名规则如下所示:

“8-digit new timelineId”.history 比如:00000002.history

时间线历史记录文件至少包含一行,每行由以下三项组成:

timelineId –用于恢复的归档日志的timelineId。

LSN –发生WAL段切换的LSN位置

reason –人类可读的时间线为什么改变的解释。

比如:postgres> cat /home/postgres/archivelogs/00000002.history

0/A000198before 2020-4-28 12:05:00.861324+00

注意上面1是行号,也代表数据库恢复过的次数。这个文件不要删除,否则会影响数据库恢复。


执行一个基于表空间备份的完全恢复

PG支持基于表空间(除了pg_global之外)级别的完全恢复,因为pg_global表空间比较特殊,其中包括控制文件,而控制文件不能使用备份的进行恢复。

1、转储备份的表空间目录到目标位置

cp -rf /backup/PG_12_201909212 /home/postgres/tblspc/

2、转储backup_lable文件到$PGDATA目录下

cp /backup/backup_lable $PGDATA

3、创建recovery.signal

4、修改postgresql.conf文件

restore_command = 'cp /home/postgres/archives/%f %p'

recovery_target_timeline = 'latest'

5、启动数据库,表空间所包含的表能够实现完全恢复

pg_ctl start


只读数据库的恢复



执行一个只读数据库的恢复

1、把数据库变成只读状态

ALTER DATABASE new_db1 SET default_transaction_read_only=on;

2、单独备份new_db1数据库目录

3、如果new_db1数据库目录损坏,关闭数据库,转储备份的目录到目标位置

4、打开数据库

*PG不支持单个数据库完全恢复。

CUUG PostgreSQL技术大讲堂系列公开课,往期视频及文档,请联系CUUG客服。

  • PostgreSQL技术大讲堂 - 第87讲:重讲系统安全和数据库安全
  • PostgreSQL认证培训推荐机构
  • Oracle OCM证书有效期3年?这是个假消息
  • Oracle OCP证书有效期3年?与官方人员确认这是个假消息
  • 2025年4月中国数据库流行度排行榜:OceanBase超过PolarDB登顶
  • Apache Doris数据库
  • 4月26日,工信部人才交流中心 & CUUG - PGCP+PGCM认证考试完成!
  • Apache IoTDB
  • DolphinDB数据库
  • Easysearch分布式搜索型数据库
  • IvorySQL数据库
  • NebulaGraph数据库
  • OCP认证考试指南:费用、大纲、备考、题库、证书及有效期全面解析
  • SelectDB数据库
  • SourceDB数据库
  • SQLite数据库
  • StarRocks数据库
  • SUNDB数据库
  • TuGraph图数据库
  • 海量数据Vastbase数据库
  • 华为云数据库 GeminiDB
  • 华为云数据库TaurusDB
  • 磐维数据库PanWeiDB
  • 神舟通用数据库
  • 实时数仓 Hologres
  • 天翼云数据库TeleDB
  • 图数据库gStore
  • 星瑞格SinoDB数据库管理系统
  • 虚谷xugudb数据库
  • 云和恩墨MogDB数据库
  • 云原生数据库GaiaDB(盖亚)
  • 2月22日,工信部人才交流中心 & CUUG - PGCP-PGCM认证考试完成!
  • 考OCP认证要交哪些费用
  • Oracle OCP认证没落了吗
  • openGauss数据库
  • PingCAP TiDB数据库
  • TDengine时序数据库
  • 阿里云AnalyticDB云原生数据仓库
  • 阿里云云原生数据库PolarDB
  • 奥星贝斯OceanBase数据库
  • 达梦数据库管理系统DM8
  • 电科金仓KingbaseES数据库管理系统
  • 华为GaussDB云数据库
  • 金篆信科GoldenDB数据库
  • 浪潮KaiwuDB数据库
  • 南大通用GBASE数据库
  • 腾讯云分布式数据库TDSQL
  • 羲和 (Halo) 数据库
  • 崖山 (YashanDB) 数据库
  • 亚信安慧AntDB数据库