GaussDB Roach逻辑备份恢复

举报
剑圣 发表于 2020/10/22 17:12:19 2020/10/22
【摘要】 目录: GaussDB Roach逻辑备份恢复原理gs_dump逻辑备份恢复工具roach逻辑备份恢复GaussDB Roach逻辑备份恢复实践 逻辑备份恢复支持、规格及约束 续备份、续恢复 逻辑备份删除 存储介质 容错支持 特殊表名 ...

 

目录:

                  GaussDB Roach逻辑备份恢复原理

        • gs_dump逻辑备份恢复工具

        • roach逻辑备份恢复

        GaussDB Roach逻辑备份恢复实践       

        •          逻辑备份恢复支持、规格及约束

        •          续备份、续恢复

        •          逻辑备份删除

        •          存储介质

        •          容错支持

        •          特殊表名

        •          并行处理

        •          最佳实践

        FAQ 



GaussDB Roach逻辑备份恢复原理

 

           1.  gs_dump逻辑备份恢复:

 

可以设置事务隔离级别。

 

gs_dump一致性备份:在单个database内保持一致,不同database之间无法保持一致,因为不同database之间需要切换connection,不能在不同database之间共享snapshot,因此只能在同一个database内保持一致性。

 

如果不保持一致。一个database数据量非常大,gs_dump备份时间会比较长,将会持有锁比较长的时间,对于一些需要ddl操作的database实例来说无法忍受。

 

解决方案:

细粒度备份,而不要备份整个database,

一次只备份一个table,调用gs_dump多次。

如果多个表之间有关联,将这些表放入一个gs_dump操作中,用-t tablename来操作。但是这个-t其实是解决了依赖关系,本质上还是按照依赖顺序串行导出。

一个单表数据量非常大,考虑分区表,也就是将数据进行了分片。否则这些表的ddl将会增加gs_dump之间的冲突。

对于数据量非常大的databse实例,推荐使用PITR物理增量备份。

 

gs_dump并行备份: gs_dump版本>=9.3,server版本>=9.2,需要支持pg_export snapshot

                                     n+1个连接,-j n是并行度,1是主节点的连接

                                     对于版本<9.2,需要并行度和数据库一致性,在备份的时候不能做dml操作。

 

            2.  roach逻辑备份恢复

 

GaussDB是一个分布式数据库,数据自动分片存储。

GaussDB roach采用了基于单表粒度的备份恢复来实现逻辑备份,即一次只备份一个table,每次通过gs_dump导出table的ddl语句,并通过单独的外表方法(roach外表方法)来导出数据(不同表之间不保证数据一致性)。

 

 

GaussDB Roach逻辑备份恢复实践

 

1. 逻辑备份恢复

 

支持单表、多表(可以是不同schema的表)、schema、database级别逻辑备份。

schema、database都默认转为多表逻辑执行(基于单表的串行实现),备份出schema、database内包含的所有表数据。

可以从多表、schema、或者database逻辑备份中恢复出任意单张表或者多张表。

 

规格约束:不支持private table,nodegroup table, replication table,table has trigger/sequence表的备份恢复。

                      对于表之间依赖关系,trigger,sequence,index等没有进行导出,只备份恢复数据。

 

单表: --tablename table  其中tablename可以是schema.table; schema默认为public,database默认为postgres

单表备份:python $GPHOME/script/GaussRoach.py --master-port 9500 --agent-port 9600 --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t backup --tablename table [--schemaname schema] [--dbname database]            

 

单表恢复:python $GPHOME/script/GaussRoach.py --master-port 9500 --agent-port 9600 --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t restore --tablename table [--schemaname schema] [--dbname database]  --backup-key bkpkey [--clean]/[--create]

 

多表: --table-list       --table-list选项与--tablename以及--schemaname不兼容;可以是不同schema中的表

  tablelist文件内容示例:

public.t1

gauss.test

T2

Public."Temp"

汉字表名

cc.1a

 

多表备份:python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t backup --table-list tablelist [--schemaname schema] [--dbname database]            

 

多表恢复:python $GPHOME/script/GaussRoach.py --master-port 9500 --agent-port 9600 --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t restore --tablelist tablelist  [--dbname database]  --backup-key bkpkey [--clean]/[--create]

 

 

Schema: --schemaname

 

Schema规格约束: 其中系统级schema "dbms_job", "dbms_lob", "dbms_om", "dbms_output", "dbms_random", "dbms_redact", "dbms_sql", "sys", "utl_file", "utl_raw", "cstore"不支持备份恢复,都会报错退出。

 

Schema备份:python $GPHOME/script/GaussRoach.py --master-port port_no  --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t backup --schemaname schema [--dbname database]            

 

Schema恢复:python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t restore --schemaname schema  [--dbname database]  --backup-key bkpkey [--clean]/[--create]

 

其中-t restore --schemaname schema  --dbname database --backup-key bkpkey 可以从database级别逻辑备份中恢复出指定的schema

 

Database:   --dbname      

 

Database规格约束:其中系统级schema "dbms_job", "dbms_lob", "dbms_om", "dbms_output", "dbms_random", "dbms_redact", "dbms_sql", "sys", "utl_file", "utl_raw", "cstore"不支持备份恢复,都会被默认过滤掉。

 

Database备份:python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t backup --dbname database           

 

Database恢复:python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t restore --dbname database  --backup-key bkpkey [--clean]/[--create]

 

 

2. 逻辑续备份、续恢复

 

逻辑备份续备份、续恢复。其中续备份对于已经进行过校验的表名不会继续校验,以提升效率。如果在续备份时某些表已经被过滤掉,没有实际备份,而用户又对表对象属性进行了修改,希望能够得到备份,则考虑重新进行单表、多表重新备份,或者等待下次备份即可。

 

多表、schema、database等均支持续备份、续恢复,仅在备份、恢复失败之后才需要做。

 

续备份: --resume-backup --backup-key bkpkey

python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t backup --schemaname schema [--dbname database] --resume-backup  --backup-key bkpkey

 

续恢复: --resume-restore--backup-key bkpkey

python $GPHOME/script/GaussRoach.py --master-port port_no --agent-port port_no --media-destination media_path  --metadata-destination metadata_path  --media-type DISK  --logging --logging-level INFO -t restore --schemaname schema  [--dbname database]  --backup-key bkpkey [--clean]/[--create] --resume-restore

 

 

3. 逻辑备份删除: 通过指定backupkey来删除,cascade是将所有backupkey全部删除。

 

python $GPHOME/script/GaussRoach.py --master-port port_no --media-destination /home/dulong/backup/media  --metadata-destination /home/dulong/backup/metadata  --media-type DISK  --logging --logging-level INFO -t delete --cascade  --backup-key bkpkey

 

 

4. 存储介质:一般指定DISK,兼容NBU、OBS等多种存储方式

 

 

5. 容错支持:对于不支持的表会进行过滤,不会影响其他表的正常备份恢复。

 

恢复到新集群:默认备份恢复database是postgres,可以指定其他database。恢复到新集群需要加--create;而恢复到老集群则最好加--clean,会将原有数据清理删除再恢复已防止数据冗余;不加则直接恢复数据,可能会导致冲突或者数据冗余。

 

同样的,如果一个数据库中某些表已经被drop掉,恢复时这些表需要--create,而其他表需要--clean。用--clean时恢复时另一部分需要--create的表会被过滤掉,反之亦然。

  


6. 特殊表名

 

汉字表名不需要加双引号

 

大写表名,大小写表名,首字母为数字,含有$, . 等特殊字符在对象中等都为特殊对象名。其中除了含大写字符的不能自动识别外,其余均可自动识别并加上双引号。表名含有. 时,默认. 前为schema名称,如果该.就是表名的一部分,则需要加两侧加双引号,以保证可以识别正确。

 

特殊对象名称需要加双引号,例如schema名为 a.b,表名为 'public.',传入必须加双引号,如‘“a.b”’,‘“public.”’,双引号外侧再加单引号是为了保证正确传入了对象名,如果传入“public.”,内部传入其实为'public.';如果对象名内有大写字符,也需要加双引号,否则内核会默认转为小写。

 

PS: 尽量不要数据库对象内加各种特殊符号。

 

 

7. 并行处理

 

Gauss数据库为分布式数据库,默认进行了分片处理。每个数据库节点上有一个或多个datanode,一般一个datanode对应一个磁盘,而我们每个节点推荐>=2个datanode保证高可用等。数据落盘为每个datanode同时向磁盘写数据,不同datanode并行的向磁盘写入数据。

 

每个datanode内为串行的处理表数据,一个表数据处理完之后再处理下一个表(8.1)。在8.1及8.2后续版本中,将实现单个datanode的多个表并行的处理数据(自定义并发度)。

 

 

8. 最佳实践

 

  1. 设置常规作业,利用多表逻辑备份业务中比较重要的表,schema及database备份往往将所有表备份,重要程度不高的表备份恢复仍然有较高开销。

  2. 对常规作业设置优先级,按优先级进行不同时间间隔的备份与恢复。

  3. Database级别逻辑备份将备份整库数据,如果database实例内表数量大且规模大,性能会比较差(单个datanode内串行备份恢复);推荐使用PITR物理增量备份来替代Database逻辑备份。

  4. 如果逻辑备份恢复中途失败,尽可能使用续备份、续恢复以完成作业。续备份只备份未备份成功的表,且对已经校验过的表将不会进行二次校验,而现行的校验为串行校验,表数量比较大的时候开销仍然较大;续恢复将恢复未恢复成功的表。在8.1以及8.2后续版本中,将实现更为细粒度的续备份、续恢复,备份效率将更为提高。

  5. 合理设置压缩算法和压缩率

 

 

FAQ

 

    1. Why not gs_dumpall?

    • The  gs_dumpall program exports all databases, one after another, into a single script file, which prevents you from performing the parallel restore. If you back up all      databases this way, the restore process will take more time.

    • The processing of dumping all databases takes longer than each individual one so you do not know which dump of each database relates to a specific point in time.

              If you have a good reason to use the gs_dump all to backup all databases, the following is the command:   

       gs_dumpall -U postgres > c:\gsbackup\all.sql

     

    2. Why not gs_dump?

        gs_dump虽然灵活,但是数据导出按照sql或者二进制,仅支持在单节点导出。数据量较大的情况下性能往往较差,且不易扩展。

     

 3.一致性?

   数据的一致性要求在备份恢复过程中要求并不一定很高,而对于性能,扩展性,灵活性等均有一定要求。因此牺牲一定一致性来换取更好的性能,易用性等,对于实际场景往往可以接受。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。