postgresql备份恢复之pg_dump大数据处理

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 目录[-]介绍使用管道压缩和解压custom-formatdirectory-format其他一些参数简单说明介绍官方文档介绍的主要有三种方式:通过unix管道,直接读取pg_dump的输出来压缩.

介绍

官方文档介绍的主要有三种方式:

  1. 通过unix管道,直接读取pg_dump的输出来压缩.
  2. 使用pg_dump的custom-format
  3. 使用pg_dump的directory-format

使用管道压缩和解压

由于pg_dump工具可以输出到标准输出,可以使用unix管道来直接压缩

1.压缩方法

[postgres@fnddb ~]$ pg_dump database1 | gzip > database1.sql.gz  

还原

[postgres@fnddb ~]$ createdb -T template0 testdb1
[postgres@fnddb ~]$ gunzip -c database1.sql.gz | psql testdb1
......

2.切分

切分文件

    [postgres@fnddb ~]$ pg_dump database1 | split -b 1k - database1.sql
    [postgres@fnddb ~]$ ll
    total 16
    -rw-rw-r--. 1 postgres postgres 1024 Feb 10 21:46 database1.sqlaa
    -rw-rw-r--. 1 postgres postgres 1024 Feb 10 21:46 database1.sqlab
    -rw-rw-r--. 1 postgres postgres   35 Feb 10 21:46 database1.sqlac

还原

[postgres@fnddb ~]$ cat database1.sql* | psql testdb1
......

custom-format

记得编译安装时提示zlib库没有安装,custom-dump format会使用zlib库压缩输出文件 
当然这不是文本文件,恢复需要使用pg_restore命来来恢复.

[postgres@fnddb ~]$ pg_dump -Fc database1 -f database1.c.dump
[postgres@fnddb ~]$ file database1.c.dump 
database1.c.dump: PostgreSQL custom database dump - v1.12-0

还原

[postgres@fnddb ~]$ createdb -T template0 testdb1
[postgres@fnddb ~]$ pg_restore -d testdb1 database1.c.dump 

可以只恢复自己赶兴趣的对象

[postgres@fnddb ~]$ pg_restore -l database1.c.dump > database1.c.dump.list
[postgres@fnddb ~]$ vi database1.c.dump.list 
;
; Archive created at Tue Feb 10 22:02:23 2015
;     dbname: database1
;     TOC Entries: 16
;     Compression: -1
;     Dump Version: 1.12-0
;     Format: CUSTOM
;     Integer: 4 bytes
;     Offset: 8 bytes
;     Dumped from database version: 9.4.1
;     Dumped by pg_dump version: 9.4.1
;
;
; Selected TOC Entries:
;
;2872; 1262 16411 DATABASE - database1 hippo
;6; 2615 2200 SCHEMA - public postgres
;2873; 0 0 COMMENT - SCHEMA public postgres
;2874; 0 0 ACL - public postgres
;175; 3079 12723 EXTENSION - plpgsql
;2875; 0 0 COMMENT - EXTENSION plpgsql
174; 1259 16544 TABLE public t3 hippo
;172; 1259 16512 TABLE public tab2 postgres
;2876; 0 0 ACL public tab2 postgres
;173; 1259 16524 TABLE public tab3 postgres
;2877; 0 0 ACL public tab3 postgres
2867; 0 16544 TABLE DATA public t3 hippo
;2865; 0 16512 TABLE DATA public tab2 postgres
;2866; 0 16524 TABLE DATA public tab3 postgres

只需要将不需要恢复的对象使用;注释掉就可以了,然后还原带上此列表

[postgres@fnddb ~]$ createdb -T template0 testdb2
[postgres@fnddb ~]$ pg_restore -L database1.c.dump.list -d testdb2 database1.c.dump
[postgres@fnddb ~]$ psql testdb2
psql (9.4.1)
Type "help" for help.

testdb2=# \dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | t3   | table | hippo
(1 row)

testdb2=# select * from t3;
  id   
-------
 t3
 user3
(2 rows)

directory-format

这种模式可以使用pg的多个工作进程.可以极大增强导出大数据库的效率. 
这种模式同一时间导出多个表.也就是并行导出,当然对服务器资源消耗也比较高,不要在高峰时刻进行. 
它输出不是一个文件,需要首先创建一个目录

[postgres@fnddb ~]$ mkdir db.dir
[postgres@fnddb ~]$ pg_dump -Fd -j4 -f db.dir database1
[postgres@fnddb ~]$ ls db.dir
2865.dat.gz  2866.dat.gz  2867.dat.gz  toc.dat
[postgres@fnddb ~]$ cd db.dir
[postgres@fnddb db.dir]$ cat 2866.dat.gz |gunzip 
\.


[postgres@fnddb db.dir]$ cat 2867.dat.gz |gunzip 
t3
user3
t3
user3
t3
user3
\.


[postgres@fnddb db.dir]$ file toc.dat
toc.dat: PostgreSQL custom database dump - v1.12-0

看结果因该是pg_dump导出了一个custom-format格式的数据库结构信息. 
同时将每一个表的数据分别导出到一个压缩文件.恢复使用copy命令可读取的格式 
-j参数指定同时几个进程来同时执行..每个进程同时只处理一个表的数据.

恢复

[postgres@fnddb ~]$ createdb -T template0 testdb3
[postgres@fnddb ~]$ pg_restore -d testdb3 -j4 db.dir

-j参数指定并发的数量(job),pg_restore恢复custom-format格式也可以使用此参数,并非只适用directory-format

其他一些参数简单说明

pg_dump和pg_restore很多参数都很类似.

-n schema |-N schema –只导出(恢复)某个schema|排除某个schema,例子见-t table 
-t table | -T table –导出(恢复)某个表|排除某个表

[postgres@fnddb ~]$ pg_dump -t t3 database1 | grep -i "create table"
CREATE TABLE t3 (
[postgres@fnddb ~]$ pg_dump -T t3 database1 | grep -i "create table"
CREATE TABLE tab2 (
CREATE TABLE tab3 (

–inserts –导出成insert 语句,导入时性能很差,主要为了迁移到其他数据库使用

[postgres@fnddb ~]$ pg_dump database1 | grep -A3 -i "copy"
COPY t3 (id) FROM stdin;
t3
user3
t3
......
[postgres@fnddb ~]$ pg_dump --inserts database1 | grep -i "insert"
INSERT INTO t3 VALUES ('t3');
INSERT INTO t3 VALUES ('user3');
......

-a –只导出数据,不导结构

[postgres@fnddb ~]$ pg_dump database1 | grep -i "create table"
CREATE TABLE t3 (
CREATE TABLE tab2 (
CREATE TABLE tab3 (
[postgres@fnddb ~]$ pg_dump -a database1 | grep -i "create table"

-c –包括drop 对象的语句进去,最好附带–if-exists参数,否则导入时会报一些对象不存在的错误,虽然无关紧要

[postgres@fnddb ~]$ pg_dump database1 | grep -i drop 
[postgres@fnddb ~]$ pg_dump -c database1 | grep -i drop 
DROP TABLE public.tab3;
DROP TABLE public.tab2;
DROP TABLE public.t3;
DROP EXTENSION plpgsql;
DROP SCHEMA public;

-C –包含创建数据库的语句

[postgres@fnddb ~]$ pg_dump database1 | grep -i "create database"
[postgres@fnddb ~]$ pg_dump -C database1 | grep -i "create database"
CREATE DATABASE database1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TABLESPACE = ts01;

其他参数可以通过官方文档或者pg_dump –help来查看

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7月前
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
590 1
|
8月前
|
存储 关系型数据库 物联网
大数据数据存储的数据库的非关系型数据库之InfluxDB
大数据时代,传统的关系型数据库已经不能满足海量数据存储和管理的需求。因此,非关系型数据库(NoSQL)应运而生,其中InfluxDB便是备受关注的一种。
254 0
|
8月前
|
存储 NoSQL 关系型数据库
大数据数据存储的数据库的非关系型数据库之Neo4J
在大数据时代,随着数据规模的快速扩大,传统的关系型数据库已经不能满足数据存储和管理的需求。非关系型数据库(NoSQL)应运而生,其灵活性、可扩展性和高性能成为大数据存储领域的新宠。其中,Neo4J就是备受推崇的一种非关系型数据库。
110 0
|
8月前
|
存储 SQL 分布式计算
大数据数据存储的数据库的非关系型数据库之HBase
当今大数据时代的到来,数据库的存储问题成为了一个主要考虑点。传统的关系型数据库因其表结构和SQL语言特性,限制了其在大数据场景下的应用。非关系型数据库(NoSQL)的应运而生,而其中的HBase数据库便是备受关注的一种。
70 0
|
8月前
|
存储 JSON NoSQL
大数据数据存储的数据库的非关系型数据库之MongoDB
当今互联网时代,数据的处理和管理已成为各行各业必不可少的一部分。尤其是在大数据领域,数据存储更是至关重要。传统关系型数据库在某些场景下并不能完全满足需求,这时非关系型数据库就应运而生。其中MongoDB作为一个非常受欢迎的非关系型数据库,备受大家关注。本文将介绍MongoDB的概念、特点以及使用方法。
73 0
|
8月前
|
存储 缓存 NoSQL
大数据数据存储的数据库的非关系型数据库之Redis
在大数据领域中,数据库是常用的数据存储方式之一。而非关系型数据库相比于传统的关系型数据库,具有更高的可扩展性、灵活性和性能等优点。本文将介绍Redis非关系型数据库的基本概念、特点和使用方法,希望能够为大家提供一些参考和帮助。
40 0
|
8月前
|
存储 分布式计算 Oracle
大数据数据存储的数据库的关系型数据库之Oracle
在大数据领域,数据库是数据存储的一个重要组成部分。Oracle作为一种强大的关系型数据库,在企业级应用中得到了广泛应用。本文将对Oracle进行介绍。
89 2
|
关系型数据库 数据库 PostgreSQL
Postgresql pg_dump&pg_restore用法
PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。pg_dump 一次只转储一个数据库, 并且不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。
11169 0