GreenPlum备份与恢复
背景知识
逻辑备份保证了库级别的全局一致性,使用了MVCC来得到保障。
需要锁定元数据(catelog AccessShareLock),同时对备份对象加AccessShareLock锁,不允许drop已有的表,Alter已有的表结构,truncate已有表等操作(只允许AccessShareLock不冲突的操作)。
但是可以在备份启动,并加载完所有的accessshare lock后,新增表,以及对新增的表做任何DDL DML操作。
非并行数据备份恢复
继承自Postgresql的逻辑备份恢复工具
逻辑备份:pg_dump,pg_dumpall,恢复时pg_restore
备份
# 备份数据库 -s 只备份表结构
pg_dump -h ip地址 -d 数据库 -s -U用户名 -w -f 备份文件.sql
# 指定表备份数据
pg_dump -h ip地址 -d 数据库 -U用户名 -w -t shcema.table1 -t shcema.table2 -f 备份文件.sql
恢复
1. pg_restore -h ip地址 -U用户名 -C -d 数据库 备份文件.sql
2. psql -f 备份文件.sql dbname
并行数据备份恢复
gpbackup和gprestore
在GPDB4.3.22之后
在GPDB5.5和之后
在GPDB6.x
数据备份gpbackup
gpbakup需要自行安装
元数据备份文件
创建一个单独的元数据文件
●文件名: gpbackup_ [t imestamp]_ _metadata .sql
非常重要,设置read-only权限禁 止手动修改
如果指定了--with-stats,创建 单独的文件保存统计信息
●文件 名: gpbackup_ [timestamp]_ statistics.sql
多文件模式下数据文件格式:
gpbackup_3_20191031141754_ 1745579.gz
●gpbackup
标准文件名前缀
●3、
对应segment的content_ id
●20191031141754
备份时间戳
● 1745579
备份表的OID,使用OID可以比较好的处理表名含特殊字符的情况
数据恢复gprestore
gprestore需要自行安装
示列
gprestore --timestamp 20190812202110 --redirect-db restoretest --create-db
增量备份
对AO表,AOCO表以及分区AO表的支持
目前,增量备份仅支持AO表和AOCO表在全量备份后执行如下操作。
- ALTER Table
- DELETE
- INSERT
- TRUNCATE
- UPDATE
- DROP and then re-create the table
对于分区AO表,不会备份全表的内容,而只备份修改过的分区
Heap表不支持增量备份
使用示列
gpbackup --dbname backuptest --compression-level 8 --incremental --leaf-partition-data
并行在线集群间数据迁移
gpcopy安装
https://blog.csdn.net/qq_42957844/article/details/103235035
逻辑备份通用问题
如果长时间的执行逻辑备份,可能影响一些ETL或者BI类型的业务(这类业务可能会在过程中 truncate 老表,加载数据等)。
建议这类需求,可以换成使用TEMP TABLE来避免锁冲突。
《PostgreSQL 逻辑备份一致性讲解 - Why pg_dump backup a database in consistent status》
不管哪种方法的逻辑备份,都存在一种问题:如果长时间的执行逻辑备份,可能影响一些ETL或者BI类型的业务(这类业务可能会在过程中 truncate 老表,加载数据等)。 建议这类需求,可以换成使用TEMP TABLE来避免锁冲突。
参考博客:
https://blog.csdn.net/mavs41/article/details/52023175
https://blog.csdn.net/qq_42957844/article/details/103235035
https://github.com/digoal/blog/blob/master/201205/20120511_01.md