前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[译]PG备份恢复工具-pg_dumpbinary

[译]PG备份恢复工具-pg_dumpbinary

作者头像
yzsDBA
发布2022-03-29 11:37:03
1.2K0
发布2022-03-29 11:37:03
举报
文章被收录于专栏:PostgreSQL研究与原理解析

postgresql weekly推荐了几款备份恢复工具,其中一个是pg_dumpbinary。

pg_dumpbinary

是一个用于转储PG数据库的工具,其中数据以二进制格式转储。必须使用对应工具pg_restorebinary恢复。

pg_dumpbinary在某些情况下很有用:

1)有pg_dump无法导出的bytea,由于转义/十六制输出超过1GB

2)有自定义类型,内部以bytea形式存储\0,但是数据作为char/varchar/text输出,会被’\0’截断。这种场景下,pg_dump会以输出格式导出数据,造成数据丢失。

3)任何其他使用二进制的场景会很有用。

如何您在这种情况下,pg_dumpbinary将通过二进制格式转储PG数据库来帮助您。在其他所有情况下,必须使用PG分发的pg_dump/pg_restore工具。

该程序使用给定的名称作为备份参数创建一个目录,然后在该目录中使用pg_dump转储per-data和post-data部分。

pg_dumpbinary从pre-data部分收集模式和表的列表,并通过psql命令执行SQL COPY命令以从所有表中以二进制格式转储所有数据。COPY语句:

COPY my_table TO stdout WITH (FORMAT binary);

所有数据都导出到每个表的文件中,名为:data-schema.table.bin.gz。该文件使用gzip即时压缩。可以使用pg_restorebinary程序恢复备份。pg_dumpbinary创建一致的备份,数据库服务器需要支持同步快照,这是在PG9.2中引入的用于主服务器和10用于备服务器的功能。pg_dumpbinary会拒绝dump小于这个最小版本的数据库。

pg_dumpbinary使用多个database连接,与主进程连接到database一次,以创建同步快照并转储pre-data部分。使用这个同步快照的每个work任务再连接一次。

pg_restorebinary

用于恢复使用pg_dumpbinary命令以二进制格式转储的PG数据库的工具。程序读取作为备份参数给出的目录,然后再-d选项中恢复数据库中的pre-data部分。完成后,继续进行数据导入。所有数据文件都再运行中解压缩并使用COPY SQL命令发送的psql命令,如:

COPY my_table FROM stdin WITH (FORMAT binary);

然后将post-data部分导入新数据库。

安装

pg_dumpbinary和pg_restorebinary都是perl程序,除了perl本身、perl模块DBD::pg和DateTime外不需要任何其他东西。PG命令pg_dump、pg_restore和psql必须通过PATH环境变量设置才可用。数据通过gzip压缩。

Perl 模块 Date::Time 可以使用sudo apt install libdatetime-perl 或安装sudo yum install perl-Date-Time。您也可以从从CPAN下载的源安装它。

Perl 模块 DBD::Pg 可以使用sudo apt install libdbd-pg-perl 或安装sudo yum install perl-DBI perl-DBD-Pg。您也可以从从CPAN下载的源安装它。

要安装 pg_dumpbinary:

代码语言:javascript
复制
perl Makefile.PL
make
sudo make install

用法

pg_dumpbinary

代码语言:javascript
复制
usage: pg_dumpbinary -d dbname [options] backup_name
    backup_name   output directory where dump will be saved. Default
                  directory name is binary_bkup_YYYY-MM-DDTHH:MM:SS
  when no output directory is provided.
options:

  -d, --database DBNAME        database to dump
  -h, --host HOSTNAME          database server host or socket directory
  -j, --job NUM                use this many parallel jobs to dump
  -n, --schema SCHEMA          dump the named schema(s) only
  -N, --exclude-schema SCHEMA  do NOT dump the named schema(s)
  -p, --port PORT              database server port number, default: 5432
  -t, --table TABLE            dump named relation
  -T, --exclude-table TABLE    do NOT dump the named table
  -u, --user NAME              connect as specified database user
  -v, --version                show program version
  --help                       show usage
  --load-via-partition-root    dump data through partitioned table only, make
                               the COPY statements target the root of the
       partitioning hierarchy rather than the partition

pg_restorebinary

代码语言:javascript
复制
usage: pg_restorebinary [options] -d dbname backup_dir
  backup_dir   directory where backup files to restore will be read.
               It must be a directory created by pg_dumpbinary.
options:

  -a, --data-only              restore only the data, no schema
  -d, --database DBNAME        database to restore, it must exists
  -E, --exclude-ext EXTNAME    name of an extension to not restore, it can
                               be used multiple time.
  -h, --host HOSTNAME          database server host or socket directory
  -i, --info                   print information about the dump and exit
  -j, --job NUM                use this many parallel jobs to restore
  -n, --schema SCHEMA          restore the named schema(s) only
  -N, --exclude-schema SCHEMA  do NOT restore the named schema(s)
  -p, --port PORT              database server port number, default: 5432
  -t, --table TABLE            restore named relation
  -T, --exclude-table TABLE    do NOT restore the named table
  -u, --user NAME              connect as specified database user
  -v, --version                show program version
  --help                       show usage
  --disable-triggers           disable triggers during data restore
  --truncate                   truncate the table before importing the data
  --schema-exists              add an IF NOT EXISTS clause to CREATE SCHEMA

并行处理

通过 pg_dumpbinary 在导出期间使用并行可以提高转储速度。将选项 -j 设置为要使用的同时进程数。该行为类似于目录格式中 pg_dump 的 -j 选项。

在调用 pg_restorebinary 期间使用并行可以提高类似的恢复速度。将选项 -j 设置为要使用的同时进程数。该行为类似于 pg_restore 的 -j 选项。

并行性还用于恢复索引和约束的后数据部分。

二进制格式

pg_dumpbinary 以二进制格式存储所有表数据,它速度很快,但请注意,它在机器架构和 PostgreSQL 版本之间的可移植性较差。二进制格式是非常特定于数据类型的,不可能在具有不同类型的列中导入数据。

原文

https://github.com/lzlabs/pg_dumpbinary

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pg_dumpbinary
  • pg_restorebinary
  • 安装
  • 用法
  • 并行处理
  • 二进制格式
  • 原文
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档