PostgreSQL pg_basebackup

简介: 本文探讨 pg_basebackup工具,本地备份、远程备份、单一表空间本地数据库的备份、表空间重定向

需要注意的地方:

1. pg_basebackup被用于获取一个正在运行中的pg数据库集簇的基础备份。该备份并不影响其他连接到该数据库的客户端。
2. 可以用做时间点恢复
3. 可以做流复制后备服务器的开始点
4. pg_basebackup创建数据库集簇文件的一份2进制副本。同时自动让系统进入和退出备份模式。
5. 备份整个数据库集簇,而不是单个数据库或数据库对象,如果你备份单个数据库,可以使用pg_dump
6. 备份是通过pg的网络连接进行的,而且要有权限,所以你要配置pg_hba.conf和使用postgres超级用户。
7. 如果你使用流复制,则max_wal_senders必须设置的足够高,你也必须保留一个会话、一个wal日志用于发送给流复制的备端。
8. 同一时间可以有多个pg_basebackup运行。但是从性能的角度来看,最好只有一个。
9. pg_basebackup也可以用于备机上的备份。但是在备机上备份有一些限制。有啥限制详细请参考http://postgres.cn/docs/11/app-pgbasebackup.html
10. 该工具是通过流复制来备份的,所以你的pg_hba.conf中得有replication权限。
11. 该工具并不用连接到任何数据库之中,所以不需要指定数据库名字
12. 当你备份的时候pg_wal下的任何归档文件都不会给你备份上。你需要用archive_command另存一份归档。
13. 当你备份的时候log目录下的log会给你备份上,但是该log日志一般用不到,可以提前删掉,或者备份的时候排除掉。

注意:

备份的时候,备份两部分,$PGDATA和自定义表空间;$PGDATA是会放到你指定的备份目录下;自定义表空间会放到跟它原来相同的路径下。比如说未备份前你的$PGDATA是/gao/data,表空间是/jia/ts;那你备份的时候pg_basebackup会把表空间还给你放在/jia/ts下,这样就会报错退出备份,同时提示你文件已存在。

所以,如果你在本机备份本机pg,会报目录下的文件已经存在,报错退出。因为PG默认就会这么存放。如果你想不存放相同路径,则可以用参数-Ft把表空间生成为tar文件,从而避免文件和路径同名的情况。默认参数是-Fp,就是放在同路径,叫同名字。

举例:
创建目录,用户,表空间,数据库,表,索引

数据创建好后,pg_hba.conf中要设置访问权限

是replication的,表示允许流复制连接,而不是允许连接到一个replication名字的数据库上。
没有允许流复制连接的规则,则报错。

需要注意的是你的这条访问规则要么写成

允许所有用户,所有IP地址访问

要么写成

指定用户或者all用户,指定具体的IP来访问

要么写成

所有用户,指定IP区间来访问

要么写成

虽然这里具体的IP 31.123跟/24不太搭,但是也可以使用,不信你就试试。

首先必须要写replicaton表示允许流复制连接,其次是没有0.0.0.0/24这种写法,
如果你写成0.0.0.0/24这种,那么你将无法使用pg_basebackup -h 主机名/IP 备份,会报你的pg_hba.conf里没有指定IP地址的设置。

实验1:本地备份
在自己的服务器上备份自己
[postgres@gao backup]$ pg_basebackup -D gaobk -Ft -z -P
40608/40608 kB (100%), 3/3 tablespaces

-D就是生成什么目录,可以写绝对路径,如果有重名路径则报错
-Ft -F就是输出格式,输出为t格式,就是将输出写成目标目录中的tar文件。pg的主数据目录被写入到一个名为base.tar文件中,其他表空间将已其OID命名
-z 启用对tar文件进行gzip压缩,使用默认的压缩级别,只有使用tar格式时才可用。压缩后在所有tar文件后加上.gz后缀。
-P 启用进度报告,备份期间生成一个大致的进度报告,会计算整个数据库尺寸、wal日志等、总数据量无法准确预估。启用该参数会增加一点点备份时间。

看上面的内容,显示大小,百分比,几个表空间;大小和百分比都是不准的。表空间数量是准确的。

有3个表空间被备份了,是哪3个呢?

16470、16471、base(就是pg_default表空间)

可是我有4个表空间,为啥pg_global没备份啊

pg_default是pg系统表空间,对应的物理位置为$PGDATA/base目录。template0和template1数据库默认表空间就是这个。用来存储系统目录对象、用户表、用户index、临时表、临时表index、内部临时表的默认表空间。相对来说比较重要,所以备份上。

pg_global是系统字典表都存在这,哪个PG都有,都一样。所以不备份。

实验2:远程备份
在A服务器上备份B服务器上的PG数据库集簇
[postgres@gao backup]$ pg_basebackup -h gao -D gaobk -Ft -z -P
-h 主机名或者IP地址

实验3:单一表空间本地数据库的备份
备份:
[postgres@gao backup]$ pg_basebackup -D --Ft -X fetch | bzip2 > backup.tar.bz2
如果在该数据库中只有一个表空间,则可以成功,如果有多个表空间,则失败。
我这个就是多表空间的,所以失败了,报错如下图

实验4:表空间重定向
备份:
[postgres@gao gaobkdata]$ pg_basebackup -D gaobkdata -T /pg/pg12/tablespace/gao_ts=/pg/pg12/tablespace2/gao_ts -T /pg/pg12/tablespace/jia_ts=/pg/pg12/tablespace2/jia_ts -Ft -P

把老表空间下的gao_ts、jia_ts重定向到了tablespace2目录下。
比如说新服务器实例的表空间路径要变化,可以用这个来搞。
必须写绝对路径。
如果以这种方法重定位一个表空间,祝数据目录中的符号链接会被更新成指向新位置。

注意:
每当你使用pg_basebackup工具备份后,将会生成一个备份历史文件。
文件存放两份,一份在$PGDATA/pg_wal中,名字叫做

每次你的pg_basebackup,都会生成一个新的备份历史文件中,覆盖老的(即使文件名不相同)。

一份在你自定义归档存放的地方,新的不会覆盖老的,跟放在pg_wal中不同。

该文件的命名分为3段式,用2个点来分隔。
第一段:你的pg_basebackup起始需要的归档文件叫什么名字
第二段:wal文件中的一个准确位置(PG知道就行,用户知道到没必要)
第三段:备份标识,知道是啥命令产生的就行。

向上图这样,我需要的第一个wal日志是1D,后面需要的是1E,1F等等;1D之前的归档就可以删掉了。
像1D和之后的wal日志是必须要保存的,为了方便使用pg_basebackup备份出来的东西恢复。所以你要考虑准备花多长时间来进行恢复,多次pg_basebackup备份之间的归档日志如何保留和删除。

解压缩可以用 tar -xzvf 来解压缩tar.gz文件

如果你用了-Ft参数,则备份出来的文件有4个,其中base.tar.gz目录中的pg_tblspc中是没有软连接文件的。
那我怎么知道表空间软连接哪个是哪个?pg_basebackup备份的时候会在base.tar.gz中生成一个文件叫做tablespace_map文件,查看该文件就会有oid对应表空间的解析

原来的长这样

所以你就可以根据这些信息来恢复$PGDATA和自定义表空间了。但是是手工来操作的,想要靠几条命令来恢复pg是不可能的。
image.png

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
安全 测试技术 开发工具
Git分支和标签的命名规范
四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境 dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。 test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定 pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。 pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境
|
4月前
|
监控 Java Spring
AOP切面编程快速入门
AOP(面向切面编程)通过分离共性逻辑,简化代码、减少冗余。它通过切点匹配目标方法,在不修改原方法的前提下实现功能增强,如日志记录、性能监控等。核心概念包括:连接点、通知、切入点、切面和目标对象。Spring AOP支持多种通知类型,如前置、后置、环绕、返回后、异常通知,灵活控制方法执行流程。通过@Pointcut可复用切点表达式,提升维护性。此外,结合自定义注解,可实现更清晰的切面控制。
408 5
|
人工智能 自然语言处理 云计算
谁主沉浮:解析中国CRM市场的竞争格局 谁是中国CRM里的第一
在中国企业数字化转型的大潮中,CRM市场日益竞争激烈。销售易凭借深厚的技术积累、自主研发的PaaS平台及AI技术的应用,以及对中国企业需求的深刻理解,在技术创新、产品体系、行业经验和本土化能力等方面展现出显著优势,确立了其在CRM市场的领导地位。面对纷享销客、金蝶云之家、明源云等竞争对手,销售易通过持续的技术创新和产品升级,不断巩固并扩大其市场优势。
谁主沉浮:解析中国CRM市场的竞争格局 谁是中国CRM里的第一
|
SQL 关系型数据库 数据库
【一文搞懂PGSQL】4.逻辑备份和物理备份 pg_dump/ pg_basebackup
本文介绍了PostgreSQL数据库的备份与恢复方法,包括数据和归档日志的备份,以及使用`pg_dump`和`pg_basebackup`工具进行逻辑备份和物理备份的具体操作。通过示例展示了单库和单表的备份与恢复过程,并提供了错误处理方案。此外,还详细描述了如何利用物理备份工具进行数据损坏修复及特定时间点恢复(PITR)的操作步骤,以应对误操作导致的数据丢失问题。
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
368 3
|
算法 搜索推荐 安全
来自一线技术人的经验分享|如何写出让人眼前一亮的述职报告
本文作者从亲身经验阐述了一线技术人为什么述职、怎么述职以及述职的重要性。每年述职都是一大关,作者把自己的一些经验教训通过文字分享给大家,希望能帮助到更多的人。
38176 14
来自一线技术人的经验分享|如何写出让人眼前一亮的述职报告
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
852 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
前端开发 索引
【IntelliJ IDEA】idea导入node_modules卡死,idea 忽略 node_modules 索引
【IntelliJ IDEA】idea导入node_modules卡死,idea 忽略 node_modules 索引
860 0
|
机器学习/深度学习 监控 算法
【传知代码】骨架行为识别-论文复现
骨架行为识别是计算机视觉中的关键技术,通过分析人体骨架轨迹和姿态来识别行为。它应用于人机交互、智能监控等领域,利用OpenPose等算法提取关键点信息。CTR-GCN是该领域的先进模型,优于2S-AGCN,通过通道拓扑优化和时间建模提高识别效果。模型包含通道细化、特征变换和维度增强三个部分。源码可在相关文章附件获取。骨架行为识别技术在视频理解、人机交互、运动分析等多个场景有广泛应用,并持续发展创新。
560 1
【传知代码】骨架行为识别-论文复现
|
机器学习/深度学习 安全 前端开发
饿了么4年 + 阿里2年:研发路上的一些总结与思考
“最重要的是选择,最困难的是坚持。——石佳宁
2808 101
饿了么4年 + 阿里2年:研发路上的一些总结与思考