ocp考试资料群:569933648 验证码:ocp ocp 12c 19c考试题库解析与资料群:钉钉群号:35277291
全部博文(486)
分类: mysql/postgresql
2024-01-12 11:06:12
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。