北京oracle培训_oracle培训哪家好_CUUG官方论坛_CUUG培训怎么样_CUUG官网

 找回密码
 立即注册
查看: 204|回复: 0

PostgreSQL从小白到高手教程 - 第41讲:postgres表空间备份与恢复

[复制链接]
发表于 2024-1-12 11:07:45 | 显示全部楼层 |阅读模式



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

第41讲:表空间备份与恢复

PostgreSQL第41讲:1月13日(周六)19:30,钉钉群(35822460)& 视频号(数据库老陈)直播
内容1:表空间备份与恢复的意义
内容2:PostgreSQL表空间概念
内容3:基于表空间备份
内容4:基于表空间的完全恢复

表空间备份与恢复的意义
PostgreSQL数据库备份所存在的问题:
        1、PG备份工具备份的总是整个数据目录,数据量大,备份时间长。
        2、PG备份工具恢复时总是恢复整个数据目录,数据量大,恢复时间长。
        3、使用表空间的备份与恢复,可以减少备份数据,缩短备份与恢复的时间。

Tablespaces
· PostgreSQL中的表空间是基本目录之外的附加数据区域,此功能已在版本8.0中实现。
· 初始化数据库后默认的表空间有pg_default、pg_global。
· pg_global表空间的物理文件位置在数据目录的global目录中,它用来保存系统表。
· pg_default表空间的物理文件位置在数据目录的base子目录中,是template0和template1数据库的默认表空间。
· 创建数据库时,默认从template1数据库进行克隆,因此除非特别指定了新建数据库的表空间,否则默认使用template1使用的表空间,即pg_default表空间。

PostgreSQL表空间物理文件位置

创建表空间时产生的目录命名规则:
                PG _ 'Major version' _ 'Catalogue version number'
例如:
                sampledb=# create tablespace new_tblspc location '/home/postgres/tblspc';
                $ ls -l /home/postgres/tblspc/
                total 4
                drwx------ 4 postgres postgres PG_12_201909212

新建表空间的目录由pg_tblspc子目录中的软链接寻址,链接名与表空间的OID值相同。
                postgres=# select oid,spcname from pg_tablespace;
                oid | spcname
                -------+------------
                1663 | pg_default
                1664 | pg_global
                90208 | new_tblspc
                (3 rows)
                $ ls -l $PGDATA/pg_tblspc/
                total 0
                lrwxrwxrwx. 1 postgres postgres 90208 -> /home/postgres/tblspc

· 如果在表空间下创建一个新的数据库(OID是90209),那么它的目录将在版本特定的子目录下创建:
                ls -l /home/postgres/tblspc/PG_12_201909212
                total 4
                drwxr-x---. 2 postgres postgres 4096 Mar 30 09:27 90209
· 在base目录下创建的数据库上创建新表指定到新建的表空间:
                testdb=# create table test1 (id int) tablespace new_tblspc;
                testdb=# SELECT pg_relation_filepath('test1');
                pg_relation_filepath
                ---------------------------------------------
                pg_tblspc/90208/PG_12_201909212/16385/90210 #在新表空间目录下创建数据库目录

执行pg_basebackup备份
示例
        产生压缩的tar包,-Ft参数指定:
                pg_basebackup -D bk1 -Ft -z -P
                此备份花的时间比较长,但是节省空间。支持表空间文件存放在其它目录下。
        产生跟源文件一样的格式,即原样格式,-Fp参数指定:
                pg_basebackup -D bk2 -Fp -P
                此备份方式很快,但是不节省空间。如果有表空间路径放在其它目录下,则备份失败。

执行表空间备份
示例
        数据库中执行开始备份函数
                select pg_start_backup('tbs');
        使用tar命令进行备份(备份tblspc表空间所在的目录)
                cp -rf /home/postgres/tblspc /home/postgres/bk1
                cp $PGDATA/backup_lable /home/postgres/bk1
        数据库中执行结束备份函数
                select pg_stop_backup();

执行一个基于表空间备份的完全恢复
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

总结
PostgreSQL数据库支持表空间的备份与完全恢复,不支持表空间下某个数据库的备份与恢复。
备份与恢复时针对的是整个表空间所在的目录。

执行表空间恢复后数据库正常使用,数据完整,证明表空间备份恢复是可行的。
CUUG PostgreSQL技术大讲堂系列公开课第41讲-表空间备份与恢复,往期视频及文档,请联系CUUG。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|CUUG认证培训 ( 京ICP备11008061号 )

GMT+8, 2024-11-28 10:42 , Processed in 0.018046 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表