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

2022-03-29 11:37:03 浏览数 (1)

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

pg_dumpbinary

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

pg_dumpbinary在某些情况下很有用:

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

2)有自定义类型,内部以bytea形式存储,但是数据作为char/varchar/text输出,会被’’截断。这种场景下,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

0 人点赞