postgresql备份与恢复数据库

一、pg_dump含义

pg_dump 是一个用于备份 Postgresql 数据库的实用程序。由 pg_dump 备份的转储文件是完全一致的,因为转储是 pg_dump 开始运行时数据的快照。 pg_dump 不会阻止其他用户访问数据库。如果普通用户已被授予数据库权限,则可以运行 pg_dump 。 pg_dump 只能备份一个数据库。 Pg_dumpall 用于备份整个集群或备份集群中所有数据库共有的公共对象。

二、pg_dump文件类型

转储文件可以脚本或存档文件格式导出。

脚本转储文件是纯文本文件,其中包含将数据库恢复到保存时所处状态所需的 SQL 命令。使用以此方式创建的脚本;使用 psql 或其他工具运行生成的 sql 文件将数据库恢复到当前状态就足够了。必须先创建相关的数据库,然后才能运行此命令,否则默认情况下将在 postgres 数据库中创建对象。

如果不想手动创建数据库,则必须使用 pg_dump 以存档文件格式,以自定义,目录, tar方式来 创建备份。然而,像这种情况下,需要使用 pg_restore 工具来恢复数据。

三、pg_dump语法

pg_ dump [connection-option …] [option …] [dbname]

-h 参数指定要备份的数据库的主机

-p 参数指定端口

-U 参数指定数据库用户

四、pg_dump备份与恢复

4.1 使用pg_dump备份与恢复数据库

1、 备份数据库

可以使用几种不同的语法生成名为 zabbix 的数据库的 SQL 转储文件。

pg_dump zabbix > db.sql

pg_dump -h localhost -p 5432 -U postgres zabbix > /home/postgres/dump/db_data.sql

pg_dump -h localhost -p 5432 -U postgres zabbix -f /home/postgres/dump/db_data.sql

2、恢复 数据库

可以将创建的转储文件还原为另一个名为 zabbix 的数据库。

psql -d zabbix -f /home/postgres/dump/db_zabbix_data.sql

psql -f /home/postgres/dump/db_zabbix_data.sql -d newzabbix -p 5432 -U postgres

4.2 、 pg_dump 自定义格式

使用以下命令以自定义文件格式创建 zabbix 数据库的转储。通过这种方式生成的备份文件将比 sql 文件小得多,因为在后台使用 zlib 压缩了该文件。

pg_dump -Fc zabbix > /home/postgres/dump/zabbix_db.dump

从自定义文件格式转储恢复数据库

pg_restore -d test_zabbix /home/postgres/dump/zabbix_db.dump

4.3 pg_dump目录格式

使用以下命令以目录格式创建 zabbix 数据库的转储。

pg_dump -Fd zabbix -f dumpdirectory

或使用并行方式备份

pg_dump -Fd zabbix -j 5 -f dumpdir

从目录文件恢复数据库

pg_restore -Fd -l dumpdirectory

4.4、pg_dump tar格式备份

下面的命令以 tar 文件格式创建 mydb 数据库的转储文件。

pg_dump -Ft zabbix> /home/postgres/dump/zabbix_db.tar

从tar文件还原Postgres数据库

pg_restore -Ft -d zabbix  /home/postgres/dump/zabbix_db.tar

4.5、pg_dump指定表备份

1、备份指定的表

pg_dump -t  table1 -d zabbix > /home/postgres/dump/table1.sql

2、备份名称以tbl开头的表

pg_dump -t 'tbl*' -d zabbix > /home/postgres/dump/tbl.sql

3、备份名称以tbl开头但不是tbl_mustafa的表

pg_dump -t 'tbl*' -T tbl_mustafa -d zabbix > /home/postgres/dump/tbl1.sql

4、备份名称以East或West开头并以gsm结尾的所有模式,并排除名称包含test的所有模式

pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' zabbix >/home/postgres/dump/tbl2.sql

pg_dump -n '(east|west)*gsm' -N '*test*' zabbix > db.sql

5、导出数据、不导表结构

pg_dump -a zabbix > /home/postgres/dump/tbl1.sql

pg_dump --data-only zabbix > /home/postgres/dump/tbl1.sql

4.6、pg_dump压缩

以下命令用于通过 pg_dump 进行压缩备份。

pg_dump zabbix | gzip -9 > zabbix.gz

4.7、pg_dump拆分

将转储输出拆分为一定大小的多个文件

pg_dump zabbix | split -b 1m – files

恢复拆分转储文件

cat files* | psql zabbix

4.8、pg_dump ON_ERROR_STOP

默认 ;  如果还原时发生错误,则 psql 将忽略该错误并继续运行。我们可以通过设置 ON_ERROR_STOP 变量来自定义这种情况。执行此命令后,代码将一直运行到发生错误的行,但后续行将不被处理。

psql --set zabbix < zabbix.sql

4.9、pg_dumpall备份

pg_dumpall 备份集群的所有内容。 pg_dumpall 为给定集群中的每个数据库创建一个备份,并为集群范围的角色和表空间定义之类的数据创建备份。 使用 pg_dumpall 进行恢复时,始终需要超级用户访问权限才能恢复角色和表空间信息。 pg_dumpall 发送命令来创建角色,表和空数据库,然后为每个数据库运行 pg_dump 。

备份全库:

pg_dumpall > all_dbdata.sql

pg_dumpall -f all_dbdata.sql

恢复全库:

psql postgres < all_dbdata.sql 

psql -f all_dbdata.sql postgres

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28833846/viewspace-2742419/,如需转载,请注明出处,否则将追究法律责任。

猜你喜欢

转载自blog.csdn.net/qq_42533216/article/details/112052403