磐维数据库,简称"PanWeiDB"。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。其产品内核能力基于华为openGauss开源软件,并进一步提升了系统稳定性。
本文将介绍磐维数据库逻辑备份的几个实践案例。
环境准备
逻辑备份实战
磐维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客户端可以在相同的事务快照下对单表进行并行化加速导出,所有任务执行完后,再结束第一个终端里的事务。




