GreenPlum备份恢复工具之pg_dump、pg_dumpall、 pg_restore等

0    87    1

Tags:

👉 本文共约19469个字,系统预计阅读时间或需74分钟。

简介或总结

相关命令参考:https://www.xmmup.com/pgluojibeifenhuifuluojidaochudaoru.html

在不指定文件格式时,默认导出的文件为SQL文本文件,不会压缩,生成的文件较大,但导出较快。

若数据库较大,可通过 -Fc--format=custom指定为custom文件,会默认进行5级压缩( --compress=5),生成的文件较小,可以按照缩8倍进行计算,但导出稍慢。在还原二进制文件,需要用 pg_restore 还原。

1、虽然是custom格式,但是,仍然是文本格式的,可以用vi或txt打开查看。

2、custom格式的文件本身就是压缩文件,若再进行OS基本的压缩( tar -zcvf aa.tar.gz lhrdb.dmp )作用不大,文件不会变化太大。

3、某生产环境GreenPlum备份(350GB,备份后41G,用时2个半小时,平均每小时130GB,每秒15MB);

​ 某生产环境GreenPlum备份(350GB,备份后41G,开32个并行,用时15分钟,每秒50MB)

​ 使用该备份进行还原,开32个并行,用时30分钟,导入后数据库250GB

4、导出和导入的库名可以不一样

5、串行备份,也可以并行恢复

注意:

1、尽量使用GreenPlum同版本提供的客户端pg_dump和pg_dumpall,而不要使用PostgreSQL端的提供的工具,否则可能会报错。

pg_dump

Extracts a database into a single script file or other archive file.

概要

描述

pg_dump是用于备份数据库的标准PostgreSQL工具,在Greenplum数据库中也受支持。 它创建一个(非并行)转储文件。 对于Greenplum数据库的常规备份,最好使用Greenplum数据库备份工具gpbackup以获得最佳性能。

如果要将数据迁移到另一个数据库供应商的系统或具有不同segment配置的另一个Greenplum数据库系统(例如,如果要迁移的系统具有更多或更少的segment实例), 请使用pg_dump。 要还原,必须使用相应的pg_restore工具(如果转储文件为归档格式), 或者可以使用诸如psql之类的客户端程序(如果转储文件为纯文本格式)。

由于pg_dump与常规PostgreSQL兼容,因此可以用于将数据迁移到Greenplum数据库中。 Greenplum数据库中的pg_dump工具与PostgreSQL pg_dump工具非常相似,但有以下例外和限制:

  • 如果使用pg_dump备份Greenplum数据库数据库,请记住,对于大型数据库,转储操作可能需要很长时间(几个小时)。 另外,必须确保您有足够的磁盘空间来创建转储文件。
  • 如果要将数据从一个Greenplum数据库系统迁移到另一个系统, 请使用--gp-syntax命令行选项在CREATE TABLE语句中包括DISTRIBUTED BY子句。 这样可以确保在还原时使用正确的分发键列分发Greenplum数据库表数据。

即使同时使用数据库,pg_dump也会进行一致的备份。 pg_dump不会阻止其他用户访问数据库(读或写)。

当与一种存档文件格式一起使用并与pg_restore结合使用时,pg_dump提供了一种灵活的归档和传输机制。 pg_dump可用于备份整个数据库,然后pg_restore 可用于检查存档和/或选择要还原数据库的哪些部分。 最灵活的输出文件格式是自定义格式(-Fc)和目录格式(-Fd)。 它们允许对所有已归档项目进行选择和重新排序,支持并行还原,并且默认情况下已压缩。 目录格式是唯一支持并行转储的格式。

Note: --ignore-version选项已弃用,在以后的版本中将被删除。

选项

dbname

指定要转储的数据库的名称。 如果未指定,则使用环境变量PGDATABASE。 如果未设置,则使用为连接指定的用户名。

转储选项

-a | —data-only

仅转储数据,而不转储模式(数据定义)。表数据和序列值将转储。

此选项与--section=data相似,但由于历史原因不同。

-b | —blobs

在转储中包括大对象。 这是默认行为,除非指定了--schema,--table或--schema-only。 -b开关仅用于在选择性转储的时候添加大对象。 请注意,blob被视为数据,因此,当使用--data-only时将包括这些blob,但在使用--schema-only时则不包括。

Note: Greenplum数据库不支持PostgreSQL大对象工具来流存储在大对象结构中的用户数据。

-c | —clean

在输出用于创建数据库对象的命令之前,将命令添加到文本输出文件中以清理(删除)数据库对象。 (如果目标数据库中不存在任何对象,则恢复可能会生成一些无害的错误消息。) 请注意,在转储操作开始之前不会删除对象,但是会将DROP命令添加到DDL转储输出文件中, 以便在使用这些文件时要还原文件,要先执行DROP命令,再执行CREATE命令。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。

-C | —create

从命令开始输出,以创建数据库本身并重新连接到创建的数据库。 (使用这种形式的脚本,在运行脚本之前连接到目标安装中的哪个数据库都没有关系。) 如果还指定了--clean,则脚本会删除并在重新连接目标数据库之前重新创建它。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。

-E encoding | —encoding=encoding

以指定的字符集编码创建转储。 默认情况下,转储以数据库编码创建。 (获得相同结果的另一种方法是将PGCLIENTENCODING环境变量设置为所需的转储编码。)

-f file | —file=file

将输出发送到指定文件。 对于基于文件的输出格式,可以省略此参数,在这种情况下,将使用标准输出。 但是,必须为目录输出格式提供该格式,该格式指定目标目录而不是文件。 在这种情况下,该目录是由pg_dump创建的,以前不能存在。

-F p|c|d|t | —format=plain|custom|directory|tar

选择输出格式。格式可以是以下之一:

p | plain — 输出纯文本SQL脚本文件(默认)。

c | custom — 输出适合输入到pg_restore的自定义存档。 与目录输出格式一起使用时,这是最灵活的输出格式,因为它允许在还原过程中手动选择和重新排序已归档的项目。 默认情况下,此格式为压缩格式,并且还支持并行转储。

d | directory — 输出适合于输入pg_restore的目录格式档案。 这将创建一个目录,其中包含要转储的每个表和blob的一个文件, 以及一个所谓的目录文件,该表以pg_restore可以读取的机器可读格式描述了转储的对象。 目录格式归档文件可以使用标准的Unix工具进行处理。 例如,可以使用gzip工具压缩未压缩档案中的文件。 默认情况下压缩此格式。

t | tar — 输出适合输入到pg_restore的tar格式的存档。 tar格式与目录格式兼容;提取tar格式的存档会生成有效的目录格式的存档。 但是,tar格式不支持压缩。 同样,在使用tar格式时,在还原过程中不能更改表数据项的相对顺序。

-i | —ignore-version

Note: 此选项已被弃用,并将在以后的版本中删除。

忽略pg_dump和数据库服务器之间的版本不匹配。 pg_dump可以从运行早期版本的Greenplum数据库(或PostgreSQL)的服务器中转储,但是可能不再支持非常旧的版本。 如果您需要覆盖版本检查,请使用此选项。

-j njobs | —jobs=njobs

通过同时转储njobs表来并行运行转储。 此选项减少了转储时间,但同时也增加了数据库服务器上的负载。 您只能将此选项与目录输出格式一起使用,因为这是多个进程可以同时写入其数据的唯一输出格式。

Note: 使用pg_dump的并行转储仅在查询调度程序(master)节点上并行化, 而不是在使用gpbackup时跨查询执行器(segment)节点并行化。

pg_dump将打开njobs + 1个到数据库的连接, 因此请确保您的max_connections设置足够高以容纳所有连接。

在运行并行转储时请求对数据库对象的排他锁可能导致转储失败。 原因是pg_dump主进程对工作进程稍后将要转储的对象请求共享锁,以确保没有人删除它们并在转储运行时使它们消失。 如果另一个客户端随后请求对表进行排他锁,则该锁将不会被授予,但将排队等待主进程的共享锁被释放。 因此,对该表的任何其他访问也不会被授予,并且将在排他锁定请求之后排队。 这包括尝试转储表的工作进程。 如果没有任何预防措施,这将是典型的死锁情况。 为了检测到这种冲突,pg_dump工作进程使用NOWAIT选项请求另一个共享锁。 如果未向工作进程授予此共享锁,则其他人在此期间必须申请到独占锁,并且无法继续进行转储,因此pg_dump别无选择,只能中止转储。

为了保持一致的备份,数据库服务器需要支持同步快照,这是Greenplum数据库6.0中引入的功能。 使用此特性,即使数据库客户端使用不同的连接,也可以确保他们看到相同的数据集。 pg_dump -j使用多个数据库连接;它通过主进程一次连接到数据库,并针对每个工作者作业再次连接到数据库。 如果没有同步快照特性,将无法保证不同的工作作业在每个连接中都看到相同的数据,这可能导致备份不一致。

如果要运行6.0之前版本服务器的并行转储, 则需要确保从主服务器连接到数据库到最后一个工作者作业连接到数据库之间的时间里,数据库的内容没有变化。 最简单的方法是在开始备份之前,停止所有访问数据库的数据修改过程(DDL和DML)。 在6.0之前的Greenplum数据库服务器上运行pg_dump -j时,还需要指定--no-synchronized-snapshots参数。

-n schema | —schema=schema

仅转储与schema匹配的模式;这将同时选择模式本身及其所有包含的对象。 如果未指定此选项,则将转储目标数据库中的所有非系统模式。 通过编写多个-n开关可以选择多个模式。 同样,根据psql的 \d命令使用的相同规则, 将schema参数解释为模式,因此也可以通过在模式中写入通配符来选择多个模式。 使用通配符时,如果需要请小心引用该模式,以防止Shell扩展通配符。

注意:当指定-n时,pg_dump不会尝试转储所选模式可能依赖的任何其他数据库对象。 因此,不能保证特定模式转储的结果可以自己成功地恢复到干净的数据库中。

Note: 指定-n时,不转储非模式对象(例如blob)。 您可以使用--blobs开关将blob添加回转储。

-N schema | —exclude-schema=schema

不要转储任何与schema匹配的模式。 根据与-n相同的规则解释该模式。 -N可以多次给出,以排除与几种模式中的任何一种匹配的模式。 当同时给出-n和-N时,行为是仅转储与至少一个-n开关匹配但不与-N开关匹配的模式。 如果出现-N而没有-n,则与-N匹配的模式将从正常转储中排除。

-o | —oids

转储对象标识符(OID)作为每个表的数据的一部分。 对于要还原到Greenplum数据库中的文件,建议不要使用此选项。

-O | —no-owner

不要输出命令来设置对象的所有权以匹配原始数据库。 默认情况下,pg_dump发出ALTER OWNER或SET SESSION AUTHORIZATION语句来设置创建的数据库对象的所有权。 除非由超级用户(或拥有脚本中所有对象的同一用户)启动脚本,否则运行脚本时这些语句将失败。 要使脚本可以被任何用户恢复,但将赋予该用户所有对象的所有权,请指定-O。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。

-s | —schema-only

仅转储对象定义(模式),而不转储数据。

此选项与--data-only相反。 它类似于--section = pre-data —section = post-data,但由于历史原因不同。

(不要将此与--schema选项混淆,该选项以不同的含义使用”schema”一词。)

要仅排除数据库中一部分表的表数据,请参见--exclude-table-data。

-S username | —superuser=username

指定禁用触发器时要使用的超级用户名。 仅在使用--disable-triggers时才有意义。 最好不要这样做,而是以超级用户身份启动生成的脚本。

Note: Greenplum数据库不支持用户定义的触发器。

-t table | —table=table

仅转储与表模式匹配的表(或视图,序列或外部表)。 以schema.table格式指定表。

通过写入多个-t开关可以选择多个表。 而且,根据psql的\d命令使用的相同规则, 将table参数解释为模式,因此也可以通过在模式中写入通配符来选择多个表。 使用通配符时,如果需要请小心引用模式,以防止Shell扩展通配符。 使用-t时-n和-N开关无效, 因为-t选择的表将被转储,而与那些开关无关,并且非表对象也将不被转储。

Note: 当指定-t时,pg_dump不会尝试转储所选表可能依赖的任何其他数据库对象。 因此,不能保证自己可以成功地将特定表转储的结果还原到干净的数据库中。

另外,-t不能用于指定子表分区。 要转储分区表,必须指定父表名称。

-T table | —exclude-table=table

不要转储任何与表模式匹配的表。 该模式根据与-t相同的规则进行解释。 -T可以多次给出,以排除与几种模式中的任何一种匹配的表。 当同时给出-t和-T时,行为是仅转储与至少一个-t开关匹配但不与-T开关匹配的表。 如果出现-T而没有-t,则与-T匹配的表将从正常转储中排除。

-v | —verbose

指定详细模式。 这将导致pg_dump向转储文件输出详细的对象注释和开始/停止时间,并向标准错误输出消息。

-V | —version

打印pg_dump版本并退出。

-x | —no-privileges | —no-acl

防止转储访问权限(GRANT/REVOKE命令)。

-Z 0..9 | —compress=0..9

指定要使用的压缩级别。 零表示无压缩。 对于自定义存档格式,此选项指定压缩单个表数据段,并且默认设置为中等压缩。

对于纯文本输出,设置非零压缩级别会使整个输出文件被压缩,就好像它是通过gzip馈送的一样。 但默认设置为不压缩。 tar存档格式当前根本不支持压缩。

--binary-upgrade

此选项供就地升级工具使用。 不建议或不支持将其用于其他目的。 该选项的行为在将来的版本中可能会更改,恕不另行通知。

--column-inserts | —attribute-inserts

将数据转储为带有显式列名((INSERT INTOtable(column, …) VALUES …))的INSERT命令。 这会使恢复非常缓慢。 它主要用于制作可以装入非基于PostgreSQL的数据库的转储。 但是,由于此选项为每一行生成一个单独的命令,因此在重新加载行时发生错误只会导致该行丢失,而不是整个表内容丢失。

--disable-dollar-quoting

此选项禁止对函数体使用美元引号,并强制使用SQL标准字符串语法对其进行引用。

--disable-triggers

仅当创建仅数据转储时,此选项才相关。 它指示pg_dump包含一些命令,以在重新加载数据时临时禁用目标表上的触发器。 如果不想在数据重装期间调用的表上有触发器,请使用此选项。 为--disable-triggers发出的命令必须以超级用户身份执行。 因此,您还应该使用-S指定超级用户名,或者最好小心地以超级用户身份启动生成的脚本。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。

Note: Greenplum数据库不支持用户定义的触发器。

--exclude-table-data=table

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
GreenPlum备份恢复工具之pg_dump、pg_dumpall、 pg_restore等后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部