暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

gs_dump备份恢复实践

原创 多米爸比 2022-09-07
1729

gs_dump可以对单个database进行备份,支持备份不同的schema结构或数据。

下面进行示例演示:

首先使用omm用户创建一个业务库

create database mes;

然后连接mes库,创建测试表mes1并插入数据

\c mes
create table mes1(id int,info1 text,info2 text);
insert into mes1 values(100,null,'aaa');
insert into mes1 values(200,'中国',null);
\q

此时数据表创建在公共的public模式下,表的owner为omm用户。

mes=# \dt
                        List of relations
 Schema | Name | Type  | Owner |             Storage              
--------+------+-------+-------+----------------------------------
 public | mes1 | table | omm   | {orientation=row,compression=no}
(1 row)

一、使用文本格式进行备份恢复

我们创建一个新库mes2

create database mes;

使用gs_dump进行如下调整:

  • 使用普通用户mes作为宿主
  • 使用与普通用户mes同名的schema作为逻辑容器,不使用public

先使用omm管理用户导出,导入恢复到mes2数据库

导入操作命令如下:

gs_dump --file=mes_way1.sql --schema=public --no-privileges  --no-owner --username=omm mes

接着修改导出文件,将search_path = public修改为search_path = mes

在mes2数据库下创建mes模式:

gsql  -U mes mes2 -r

create schema mes authorization mes;

omm管理用户进行恢复

gsql --file=mes_way1.sql --username=omm mes2 

此时数据表都移到mes模式下,并且mes已经作为数据表的owner。

总结:文本格式方便我们对内容进行修改调整。

二、使用section子项进行备份处理

section子项的作用可以参考这篇文章:pg_dump子项section的三种开关

为了处理索引表空间问题,分别按section子项进行备份
1.数据备份前结构预处理

gs_dump  --file=mes_way2_pre.sql  --section=pre-data --schema=mes --no-subscriptions --username=mes mes2 

2.数据备份

gs_dump  --file=mes_way2_data.sql  --section=data --schema=mes --no-subscriptions --username=mes mes2 

3.数据备份后逻辑处理

gs_dump  --file=mes_way2_post.sql  --section=post-data --schema=mes --no-subscriptions --username=mes mes2 

新建数据库mes3进行处理

create database mes;

mes用户恢复先恢复预处理结构和数据

gsql --file=mes_way2_pre.sql --username=mes mes3 
gsql --file=mes_way2_data.sql --username=mes mes3 

然后对mes_way2_post.sql索引结构进行手工处理,处理完毕再执行下面语句。

gsql --file=mes_way2_post.sql --username=mes mes3 

总结:使用section选项方便我们对数据备份前后过程进行干预。

三、使用二进制进行备份

使用二进制备份效率比文本格式高,普通用户可以对自己的数据库对象进行备份及恢复,需要注意全局逻辑订阅的影响。

备份命令如下:

gs_dump  --file=mes_way3.dmp --format=c --schema=mes --no-subscriptions --username=mes mes2 

恢复操作如下:

gs_restore --username=mes -d mes3  mes_way3.dmp 

注意操作之前需要先删除相关对象,下面直接级联删除模式。

gsql  -U mes mes3 -r --password='mes@1234'
drop schema if exists mes cascade;
\q

总结:使用二进制选项备份效率最高,需要保证源与目标的结构一致性。

最后修改时间:2022-10-22 12:35:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论