【PostgreSQL】数据库备份与还原

PG 数据库备份命令pg_dump解读

定义

pg_dump:是一个用于备份PostgreSQL数据库的实用工具,即使当前数据库正在使用,也能够生成一致性的备份,且不会阻塞其他用户访问数据库(包括读、写)。

语法

pg_dump [connection-option...] [option...] [dbname]
pg_dump [ -h host ] [ -p port ]
    [ -t table ]
    [ -a ] [ -c ] [ -d ] [ -D ] [ -i ] [ -n ] [ -N ]
    [ -o ] [ -s ] [ -u ] [ -v ] [ -x ]
    [ dbname ]

参数

-h host 或 --host=host:指定运行服务器的主机名。
-p port 或 --port=port:监听端口号,默认端口为5432。
-U username 或 --username=username:指定要连接的用户名。
-w 或 --no-password:从不提示密码,该选项常用于后台脚本中。
-W 或 --password:强制 pg_dump 在连接到一个数据库之前提示密码,某些情况下可避免额外的连接尝试。
–role=rolename:该选项会导致 pg_dump 在连接到数据库时发布一个 set role rolename 命令。相当于切换到另一个角色。当已验证的用户缺少 pg_dump需要的权限时,可以使用这个功能切换到一个相应权限的角色。
dbname:指定连接的数据库名。
-a 或 --data-only:只对纯文本格式有意义,只输出数据,不输出数据定义的sql。
-b 或 --blobs:在输出中是否包含大对象。除非指定了选择性输出的选项 --schema、–table、–schema-only 开关,否则默认会输出大对象。
-c 或 --clean:只对纯文本格式有意义。指定输出的脚本中是否生成清理该数据库对象语句(如drop table 命令)。
-C 或 --create:只对纯文本格式有意义。指定脚本中是否输出一条 create database 语句和连接到该数据库的语句。一般在备份的源数据库和目标数据库的名称一致时,才指定此参数。
-E encoding 或 --encoding=encoding:以指定的字符集编码创建输出,默认为数据库字符集。
-f file 或 --file=file:输出到指定的文件中。
-F format 或 --format=format:选择输出的格式,可以是p、c、t。
	p 是 plain 的意思,为纯文本 sql 脚本文件格式,为默认格式。
	c 是 custom 的意思,以一个适合 pg_restore 使用的自定义格式输出并归档。这是最灵活的输出格式,在该格式中允许手动查询并且可以在 pg_restore 恢复时重		排归档项的顺序。该格式默认是压缩的。
	t 是 tar 的意思,以一个适合输入 pg_restore 的 tar 格式输出并归档。该格式允许手动选择并且在恢复时重排序归档项的顺序,但这个重排序是有限制的,比如,表数据项的相关顺序在恢复时不能更改。同时,tar 格式不支持压缩,并且对独立表的大小限制为 8GB。
-n schema 或 --schema=schema:只输出匹配 schema 的模式内容,如果没有指定这个选项,目标数据库中所有非系统模式都会被输出。可以使用多个 -n 指定多个模式,也可以使用通配符匹配多个模式,使用通配符时最好用引号进行界定,防止 shell 将通配符进行扩展。
-N schema 或 --exclude-schema=schema:排除模式输出。优先级低于 -n。
-o 或 --oids:指定是否为每个表都输出对象标识(OID)。
-O 或 --no–owner:只对纯文本格式有意义,表示不把对象的所有权设置为对应源端数据库中的owner,为了让脚本可以被任何用户使用。
-s 或 --schema-only:只输出对象定义(模式),不输出数据。这个选项在备份表结构或在另一个数据库上创建相同结构的表时比较有用。
-S username 或 --superuser=username:指定关闭触发器时需要用到的超级用户名。它只在使用了 --disable-triggers 时才有作用。一般情况下最好不要输入这个参数,而是用超级用户启动生成的脚本。
-t table 或 --table=table:只输出匹配表、视图、序列,可以使用多个 -t 匹配多个表,也可以匹配通配符,使用通配符时最好用引号进行界定,防止shell将通配符进行扩展。优先级高于 -n。
-T table 或 --exclude-table=table:排除表输出。优先级低于 -t。
-v 或 --verbose:执行过程中打印更详细的信息。使用此选项后,pg_dump 将输出详细的对象评注及输出文件的启停时间和进度信息(输出到标准错误上)。
-V 或 --version:输出 pg_dump 版本并退出。
-x 或 --no–privileges 或 --no-acl:禁止输出访问权限(grant/revoke命令)。
-Z 0.9 或 --compress=0.9:指定要使用的压缩级别,0表示不压缩。对于自定义归档格式,改参数指定压缩的单个表数据段,并且默认用中等水平压缩。对于纯文本输出,设置一个非零的压缩级别会导致全部输出文件被压缩,默认不压缩。tar 归档格式目前不支持压缩。
–binary-upgrade:专为升级工具准备的。
–inserts:insert命令输出数据,默认使用 copy 命令输出数据,这个选项主要用于将数据加载到非 PostgreSql 数据库。该选项为每一行生成一个 insert 命令,因此恢复时非常缓慢,但当数据库恢复时遇到一行错误时,它将仅丢失一行数据而不是全部的表内容。若目标端字段与源端字段顺序不一致,恢复可能完全失败,此时可使用 --column-inserts 选项。
–column-inserts 或 -attribute-inserts:显式指定字段名输出数据(insert into table(column1,……)values(……))。
–disable-dollar-quoting:关闭美元符号界定函数体。强制函数体内容用 SQL 标准的字符串语法的引号包围。
–disable-triggers:仅对纯文本格式有意义,只和创建仅有数据的输出相关。在恢复数据时,临时关闭目标表上的触发器。目前,发出 --disable-triggers命令的必须是超级用户,执行输出脚本时,应用 -S 执行一个超级用户的名称。
–lock-wait-timeout=timeout:等待表锁,超时失败。
–no-tablespaces:仅对纯文本格式有意义,不输出命令来选择表空间。
–use-set-session-authorization:使用 set session authorization 命令来代替 alter owner 命令设置所有权。

举例

-- 备份127.0.0.1:5432 用户名为postgres   备份dbName数据库到backFileName.tar 文件
pg_dump –h 127.0.0.1 -p 5432 -U postgres -c -C –f /fileDirPath/backFileName.tar -E utf8 -Ft dbName

用到的命令解析:
-c 或 --clean:只对纯文本格式有意义。指定输出的脚本中是否生成清理该数据库对象语句(如drop table 命令)。
-C 或 --create:只对纯文本格式有意义。指定脚本中是否输出一条 create database 语句和连接到该数据库的语句。一般在备份的源数据库和目标数据库的名称一致时,才指定此参数。
-E encoding 或 --encoding=encoding:以指定的字符集编码创建输出,默认为数据库字符集。
-f file 或 --file=file:输出到指定的文件中。
-F format 或 --format=format:选择输出的格式,可以是p、c、t。
	t 是 tar 的意思,以一个适合输入 pg_restore 的 tar 格式输出并归档。该格式允许手动选择并且在恢复时重排序归档项的顺序,但这个重排序是有限制的,比如,表数据项的相关顺序在恢复时不能更改。同时,tar 格式不支持压缩,并且对独立表的大小限制为 8GB。

PG 数据库还原命令pg_restore解读

定义

pg_restore :从一个归档中恢复一个由 pg_dump 创建的 PostgreSQL 数据库.

语法

pg_restore [connection-option...] [option...] [filename]

参数

1)-h host 或 --host=host
指定数据库服务运行的主机IP或主机名称。

2)-p port 或 --port=port
执行数据库的监听端口号,默认5432。

3)-U username 或 --username=username
指定要链接的数据库用户名。

4)-w 或 --no-password
从不提示密码。远程导出加此参数会导致命令错误,此选项一般用在数据库服务本地服务器导出时不指定密码。

5)-W 或 --password
强制 pg_dump 在连接一个数据库时提示密码。此参数选项可以不指定,因为如果服务器要求密码验证,pg_dump会自动提示密码输入,不指定时会浪费一个连接试图找出服务器是否需要面,指定时可避免额外的链接尝试。

6)–role=rolename
该选项会导致 pg_dump 在连接数据库时发送一个 SELECT ROLE rolename 命令。相当于切换到了指定的角色上,当已验证的用户缺少 pg_dump 运行需要的权限时,可以使用该选项指定的有相应权限的角色上。

7)-d dbname 或 --dbname=dbname
1)filename
指定需要恢复的归档文件的位置(对于directory-format存档就是一个目录),如果没有指定,使用标准输出。

2)-a 或 --data-only
只恢复数据,而不是模式(数据定义)。如果存档中存在表数据、大型对象和序列值,则会恢复这些值。

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

3)-c 或 --clean
在导入数据表前对数据库中相同表名的表清除然后将dump文件中的表导入进去,如果导入的数据库中没有dump文件中的表会有错误提示要清除的表不存在,不过这些错误提示是没有关系的(除非使用 --if-exists,否则如果目标数据库中没有对象,则可能会生成一些无害的错误消息。)

4)-C 或 --create
在还原之前创建数据库。如果还指定了 --clean,那么在连接到目标数据库之前,删除并重新创建它。

使用 --create, pg_restore还可以恢复数据库的注释(如果有的话),以及特定于此数据库的任何配置变量设置,即任何ALTER DATABASE……SET……ALTER ROLE… IN DATABASE … SET … 数据库的命令。还将恢复数据库本身的访问特权,除非指定了
–no-acl。

5)-d dbname 或 --dbname=dbname
连接到数据库dbname并直接还原到数据库。
Connect to database dbname and restore directly into the database.

6)-e 或 --exit-on-error
如果在向数据库发送SQL命令时遇到错误,则退出。默认值是继续,并在恢复结束时显示错误计数。

7)-f filename 或 --file=filename
为生成的脚本指定输出文件,或者为与-l一起使用的清单指定输出文件。使用-用于标准输出。

8)-F format 或 --format=format
指定档案的格式。没有必要指定格式,因为pg_restore将自动确定格式。如有指明,可以是下列其中一项:
	a)c (custom)
	归档文件采用pg_dump的自定义格式。
	b)d (directory)
	存档是一个目录存档。
	c)t (tar)
	该归档文件是一个tar归档文件。

9)-I index 或 --index=index
仅恢复已命名索引的定义。可以使用多个-I开关指定多个索引。

10)-j number-of-jobs 或 --jobs=number-of-jobs
使用多个并发作业运行pg_restore中最耗时的部分—加载数据、创建索引或创建约束的部分。此选项可以极大地缩短将大型数据库还原到运行在多处理器机器上的服务器的时间。

根据操作系统的不同,每个作业都是一个进程或一个线程,并使用到服务器的独立连接。

此选项的最佳值取决于服务器、客户机和网络的硬件设置。因素包括CPU内核的数量和磁盘设置。我们可以从服务器上的CPU内核数量开始,但是在许多情况下,大于这个数量的值也会导致更快的恢复时间。当然,过高的值将导致性能下降,因为抖动。

此选项仅支持自定义和目录存档格式。输入必须是常规文件或目录(而不是管道)。在发出脚本而不是直接连接到数据库服务器时,将忽略此选项。此外,多个作业不能与选项(单事务)一起使用。

11)-l 或 --list
列出档案的目录。该操作的输出可以用作-L选项的输入。注意,如果-n或-t之类的过滤开关与-l一起使用,它们将限制所列出的项。

12)-L list-file 或 --use-list=list-file
仅还原列表文件中列出的存档元素,并按它们在文件中出现的顺序还原它们。注意,如果-n或-t之类的过滤开关与-L一起使用,它们将进一步限制恢复的项。

list-file通常是通过编辑前一个-l操作的输出来创建的。可以移动或删除行,也可以通过在行开头放置分号(;)来注释掉行。

https://blog.csdn.net/weixin_44375561/article/details/120001319?spm=1018.2226.3001.4187
https://blog.csdn.net/qq_32838955/article/details/105123502?spm=1001.2014.3001.5502

举例

-- 从backFileName.tar 还原数据库127.0.0.1:5432 用户名为postgres  的dbName数据库
pg_restore -h 127.0.0.1 -p 5432 -U postgres -v -c -d dbName  /fileDirPath/backFileName.tar 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
postgresql(简称Postgres)是一个高性能的企业级开源关系型数据库管理系统。在实际运行过程中,由于各种原因,Postgres数据库可能会出现一些问题,比如数据损坏、硬盘故障、误删除等情况,这时候备份和恢复就显得尤为重要。 Postgres数据库备份 Postgres数据库备份主要包括两种方式:物理备份和逻辑备份。 1. 物理备份 物理备份是指备份整个Postgres数据库的物理文件,包括数据和日志等信息。这种备份方式具有非常高的恢复效率和完整性,备份后可以快速地还原到任何一个时间点的状态。但是,物理备份存在一些限制,例如,如果备份时数据库正在运行,会存在锁定文件的问题,同时备份后的数据不太容易人工查看和修改。 实现物理备份的两种方式: (1)基于文件系统备份 这种备份方式是直接备份Postgres数据库文件目录,包括数据文件(Data File)、事务日志文件(WAL File)和配置文件等。使用类似于cp、tar等常见的文件操作命令完成备份,简单方便。 (2)基于pg_basebackup工具备份 pg_basebackup是PostgreSQL自带的备份工具,可以很方便地进行物理备份。只需指定备份目录,即可将整个PostgreSQL数据库备份到指定目录下。 2. 逻辑备份 逻辑备份是指备份Postgres数据库中的逻辑数据,比如表、视图、函数、触发器等,备份后数据可以人工查看和编辑。但是,逻辑备份的恢复效率没有物理备份高,同时在备份和恢复过程中需要注意一些事项。 实现逻辑备份的两种方式: (1)基于pg_dump工具备份 pg_dump工具是PostgreSQL自带的备份工具,可以对数据库进行逻辑备份。备份时可以指定备份的对象(比如表、视图、函数等),也可以备份整个数据库。备份完成后,可以通过pg_restore工具进行恢复。 (2)基于导出/导入工具备份 除了pg_dump工具,还有其他的导出/导入工具可以进行逻辑备份,比如psqlSQL Shell等。其中,psqlPostgreSQL自带的终端用户控制台工具,可以对数据库进行交互式的管理和操作,包括导出/导入数据等。 Postgres数据库恢复 Postgres数据库恢复需要根据备份类型进行相应的恢复操作。 1. 对于物理备份 (1)基于文件系统备份的恢复 只需要将备份文件还原到需要恢复的PostgreSQL数据库目录下即可,恢复后启动PostgreSQL即可。 (2)基于pg_basebackup工具备份的恢复 指定备份目录为数据目录,启动PostgreSQL即可。在恢复完成后,还可以通过pg_archivecleanup工具清理归档日志。 2. 对于逻辑备份 (1)基于pg_dump工具备份的恢复 首先需要创建一个新的数据库(如果原数据库已经损坏)。然后使用pg_restore工具将备份文件恢复到指定数据库中即可。 (2)基于导出/导入工具备份的恢复 与pg_dump工具类似,需要先创建一个新的数据库,然后使用导入工具恢复备份文件到指定数据库中。 总结 Postgres数据库备份和恢复是保证数据安全、保障系统稳定的重要手段。无论是物理备份还是逻辑备份,都有各自的优势和限制,需要根据实际需求进行选择和应用。同时,备份和恢复操作也需要密切结合数据库实际情况和业务需求,综合考虑一些因素,如备份周期、备份策略、备份类型、备份存储空间、恢复时间等,才能够达到最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值