
从新手成长为PostgreSQL领域的专家,这一系列教程旨在逐步提升您的技能,涵盖了从基础认知到安装使用,再到角色权限、维护管理等多个方面。我们衷心希望这些内容能为那些热爱并致力于学习PostgreSQL的朋友们提供助力,并诚挚邀请您继续关注CUUG PG技术大讲堂。
第39讲:数据库完全恢复
12月23日(周六)晚上7点半,PostgreSQL的第39讲将在钉钉群(群号: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日志生成数据库的非当前版本
完全恢复
确认数据库关闭
恢复数据文件
即便是在进行全库备份的情况下,就算只是单个数据文件出现了损坏,也必须对所有的转储备份数据文件进行操作。
若仅为特定空间(非全局空间)进行备份,即便该空间下的单个数据文件遭受损害,亦需对全部备份数据文件进行转储。
修改postgresql.conf文件
生成recovery.signal空文件
启动数据库(recovery)
归档模式完全恢复优缺点
优势
将所有数据恢复到最新点(故障点)
恢复时间是转储数据文件和应用所有归档日志文件所需的时间
缺点
必须具有自您要从中恢复的备份以来的所有归档日志文件
执行一个基于数据库备份的完全恢复
示例(恢复前备份pg_wal目录下所有文件)
1、使用tar包进行恢复
执行以下命令以解压备份文件:使用tar命令,以详细模式(-zvxf)解压位于/backup目录下的base.tar.gz文件,并将解压内容复制到$PGDATA目录中。
2、修改postgresql.conf文件
恢复命令为:复制/home/postgres/archives/目录下的文件到目标路径%p,具体文件名为%f。
恢复目标时间表设定为最新版本。
3、生成recovery.signal空文件
touch recovery.signal
4、启动数据库
pg_ctl start
时间线和时间线历史文件
timelineId(时间线)
每次完成全面或局部的数据恢复后,数据库的时间线都会随之更新开yun体育app官网网页登录入口,这标志着数据从故障点之后重启了新的发展轨迹,并且会借助时间线历史文件进行记录。

timelineId 和 wal文件名关系
时间线的改变导致wal名字发生变化
数据库恢复作业完成后,将生成新的wal文件。该文件的命名方式是在原有段文件名的基础上云开·全站体育app登录,将旧的时间线替换为新的时间线,其余部分保持不变。

时间线和时间线历史文件
Timeline History File
历史记录文件将被创建于pg_wal中,并且会同步至归档文件夹内kaiyun.ccm,其命名规范详见以下说明。
“由八位数字构成的新时间线标识符”的记录,例如:00000002的记录。
时间线历史记录文件至少包含一行,每行由以下三项组成:
timelineId,即用于恢复归档日志的特定时间线标识符。
LSN –发生WAL段切换的LSN位置
reason –人类可读的时间线为什么改变的解释。
比如:postgres> cat
位于/home目录下的postgres用户文件夹中的archivelogs子目录内,存在一个名为00000002.history的文件。

