暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

磐维数据库2.0系列:逻辑备份案例集

原创 #5z# ๑҉ 2024-01-10
635

磐维数据库,简称"PanWeiDB"。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。其产品内核能力基于华为openGauss开源软件,并进一步提升了系统稳定性。

本文将介绍磐维数据库逻辑备份的几个实践案例。

环境准备

磐维数据库2.0系列:om及ptk安装

逻辑备份实战

磐维2.0.0提供多种数据库兼容性,PG兼容性部分特性参考:磐维数据库2.0系列:PG兼容性

同时也提供部分兼容PG命名的工具,例如psql、pg_dump、pg_restore等。

下面介绍pg_dump/pg_restore备份的几个案例

案例1: 只备份结构

只备份出某个db下的所有结构

$ pg_dump --schema-only --file=dump_schema1.sql

一些场景下可能需要使用-Ox来排除权限和owner信息

$ pg_dump --schema-only -Ox --file=dump_schema2.sql

案例2: 快速加载数据

使用section子项,控制导出对象的顺序

  • section=pre-data,只导出对象DDL排除索引
  • section=data,导出数据
  • section=post-data,最后进行约束校验和索引创建

post-data导出包含索引、规则、触发器、唯一约束、主键、外键约束,不包含检查约束和非空约束。

文本方式导出基本的DDL到file1

$ pg_dump --schema=schema1 \ --section=pre-data \ --format=p \ --file=file1 \ --username=panwei postgres

二进制格式快速导出数据库到file2

pg_dump --schema=public \ --section=data \ --format=c \ --file=file2 \ --username=panwei postgres

文本方式导出约束索引等到file3

$ pg_dump --schema=schema1 \ --section=post-data \ --format=p \ --file=file3 \ --username=panwei postgres

由于索引及约束、触发器等被拆分出来,恢复时按顺序执行可提升效率。

案例3: 使用清单精确恢复对象

使用pg_dump/pg_restore的自定义格式时,可以通过清单文件来恢复出特定的数据库对象,例如仅恢复函数或仅恢复表结构等。

清单文件需要导出时使用-Fc格式

$ pg_dump -Fc mydb -f mydatabase.db

备份文件生成之后,再使用pg_restore工具的-l开关生成清单:

$ pg_restore -l mydatabase.db > mydatabase_manifest.ini

随后我们可以按照清单文件进行恢复:

$ pg_restore -L mydatabase_manifest.ini -d mydb2 mydatabase.db

下面的案例只导出public模式下所有表结构,而不包括序列、索引、约束及函数

$ pg_dump -s -Fc mydb --file=dump_schema -n schema1 testdb $ pg_restore --list dump_schema | grep "TABLE" > table_list $ pg_restore --dbname=testdb2 --use-list=table_list dump_schema

案例4: 利用快照加速单表导出

pg_dump可以利用多个workers在db级并行化导出,但并行化是表级别的,单个表不能进一步并行化。

为了对单个大表(非分区表)并行化导出数据,需要使用多个客户端,每个客户端的事务隔离级别都使用REPEATABLE READ,使用相同的快照ID对单表进行并行化加速导出。

第一个终端

start transaction isolation level repeatable read; select pg_export_snapshot();

第N个终端使用

start transaction isolation level repeatable read; set transaction snapshot 'XXXXXXXX'; copy (query1) to '/tmp/data1';

多个psql客户端可以在相同的事务快照下对单表进行并行化加速导出,所有任务执行完后,再结束第一个终端里的事务。

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

评论