PostgreSQL从入门到精通教程 - 第39讲:数据库完全恢复

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: postgresql技术大讲堂 - 第39讲:数据库完全恢复


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客服。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
11天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
33 4
SpringBoot入门(4) - 添加内存数据库H2
|
13天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
25 2
SpringBoot入门(4) - 添加内存数据库H2
|
21小时前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
25 15
|
5天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
40 13
|
9天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
50 1
|
12天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
53 4
|
13天前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
55 6
|
20天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
35 0
【入门级教程】MySQL:从零开始的数据库之旅
|
15天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
16天前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!

相关产品

  • 云原生数据库 PolarDB