网站搜索

如何备份和恢复 PostgreSQL 数据库


在生产环境中,无论您的 PostgreSQL 数据库有多大或多小,定期备份都是数据库管理的一个重要方面。在本文中,您将学习如何备份和恢复 PostgreSQL 数据库。

我们假设您已经安装了可以正常工作的 PostgreSQL 数据库系统。如果没有,请阅读我们的以下文章,在您的 Linux 发行版上安装 PostgreSQL

让我们开始吧…

备份单个 PostgreSQL 数据库

PostgreSQL 提供pg_dump 实用程序来帮助您备份数据库。它使用 SQL 命令生成一个数据库文件,其格式可以在将来轻松恢复。

要备份 PostgreSQL 数据库,请先登录数据库服务器,然后切换到 Postgres 用户帐户,并运行 pg_dump,如下所示(将 howtoingdb 替换为您要备份的数据库的名称)。默认情况下,输出格式是纯文本 SQL 脚本文件。

pg_dump tecmintdb > tecmintdb.sql

pg_dump 还支持其他输出格式。您可以使用-F选项指定输出格式,其中c表示自定义格式存档文件,d表示目录格式存档, >t 表示 tar 格式的存档文件:所有格式都适合输入到 pg_restore 中。

例如:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

要以目录输出格式转储输出,请使用 -f 标志(用于指定输出文件)来指定目标目录而不是文件。 pg_dump 创建的目录必须不存在。

pg_dump -F d tecmintdb -f tecmintdumpdir	

要备份所有 PostgreSQL 数据库,请使用 pg_dumpall 工具,如图所示。

pg_dumpall > all_pg_dbs.sql

您可以使用 psql 恢复转储,如图所示。

psql -f all_pg_dbs.sql postgres

恢复 PostgreSQL 数据库

要恢复 PostgreSQL 数据库,您可以使用 psqlpg_restore 实用程序。 psql 用于恢复 pg_dump 创建的文本文件,而 pg_restore 用于从 pg_dump 创建的存档恢复 PostgreSQL 数据库 采用一种非纯文本格式(自定义、tar 或目录)。

以下是如何恢复纯文本文件转储的示例:

psql tecmintdb < tecmintdb.sql

如上所述,自定义格式转储不是 psql 的脚本,因此必须使用 pg_restore 恢复它,如图所示。

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

压缩的 PostgreSQL 数据库备份

如果您要备份的数据库很大并且您想要生成一个相当小的输出文件,那么您可以运行压缩转储,其中您必须通过 gzip 等压缩工具过滤 pg_dump 的输出或您最喜欢的任何一个:

pg_dump tecmintdb | gzip > tecmintdb.gz

如果数据库非常大,您可以通过使用 -j 标志同时转储 number_of_jobs 表来并行转储,如图所示。

pg_dump -F d -j 5 -f tecmintdumpdir

需要注意的是,并行转储选项减少了转储的时间,但另一方面,它也增加了数据库服务器的负载。

备份远程 PostgreSQL 数据库

pg_dump是一个常规的PostgreSQL客户端工具,它支持远程数据库服务器上的操作。要指定 pg_dump 应联系的远程数据库服务器,请使用命令行选项 -h 指定远程主机,并使用 -p 指定远程主机数据库服务器正在侦听的端口。此外,使用 -U 标志指定要连接的数据库角色名称。

请记住将 10.10.20.105432howtoingdb 分别替换为您的远程主机 IP 地址或主机名、数据库端口和数据库名称。

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

确保远程连接的用户具有访问数据库所需的权限,并且在数据库服务器上配置了适当的数据库身份验证方法,否则,您将收到如下屏幕截图所示的错误。

还可以将数据库直接从一台服务器转储到另一台服务器,使用 pg_dumppsql 实用程序,如图所示。

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

使用 Cron 作业自动备份 PostgreSQL 数据库

您可以使用 cron 作业定期执行备份。 Cron 作业是调度各种任务在服务器上运行的常用方法。

您可以配置 cron 作业来自动执行 PostgreSQL 数据库备份,如下所示。请注意,您需要以 PostgreSQL 超级用户身份运行以下命令:

mkdir -p /srv/backups/databases

接下来,运行以下命令编辑 crontab 以添加新的 cron 作业。

crontab -e

将以下行复制并粘贴到 crontab 的末尾。您可以使用上面解释的任何转储格式。

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

保存文件并退出。

cron 服务将自动开始运行这个新作业,无需重新启动。而且这个 cron 作业会在每天午夜运行,这是备份任务的最低限度解决方案。

有关如何安排 cron 作业的更多信息,请参阅:如何在 Linux 上创建和管理 Cron 作业

现在就是这样!将数据备份作为数据库管理例程的一部分是个好主意。如果您有任何问题或意见,请使用下面的反馈表联系我们。有关更多信息,请参阅 pg_dump 和 pg_restore 参考页。