如何备份PostgreSQL数据库

如果您在生产环境中使用PostgreSQL,请务必采取预防措施以确保用户的数据不会丢失。通过频繁备份数据库或使用cron任务自动执行备份,您将能够在数据库丢失或损坏的情况下快速还原系统。幸运的是,PostgreSQL包含的工具使这项任务变得简单易行。

开始之前

在开始本教程之前,您应该在系统上安装PostgreSQL。浏览我们如何在Ubuntu教程上安装PostgreSQL以安装PostgreSQL并创建一个示例数据库。

一次性SQL转储

单数据库

PostgreSQL提供了pg_dump实用程序来简化备份单个数据库的过程。 必须以对要备份的数据库具有读取权限的用户身份运行此命令。

postgres用户身份登录:

su - postgres

通过运行以下命令将数据库的内容转储到文件中。替换dbname为要备份的数据库的名称。

pg_dump dbname > dbname.bak

生成的备份文件dbname.bak可以使用scp传输到另一台主机,也可以存储在本地以供以后使用。

要演示恢复丢失的数据,请删除示例数据库并在其位置创建一个空数据库:

   dropdb dbname
   createdb dbname

使用psql恢复数据库

   psql test < dbname.bak

备份格式有几种选择:

  • *.bak:压缩二进制格式
  • *.sql:明文转储
  • *.tar:tarball

注意:默认情况下,PostgreSQL将忽略备份过程中发生的任何错误。这可能导致备份不完整。要防止这种情况,您可以使用-1选项运行pg_dump命令。 这会将整个备份过程视为单个事务,这将在发生错误时阻止部分备份。

pg_dump -1 dbname > dbname.bak

远程数据库

正如psql允许您连接到远程主机一样,可以从客户端计算机运行pg_dump以备份远程服务器上的数据。 使用-h标志指定服务器的IP地址(本文使用198.51.100.0),使用-p标识PostgreSQL正在侦听的端口:

pg_dump -h 198.51.100.0 -p 5432 dbname > dbname.bak

所有数据库

由于pg_dump一次只创建一个数据库的备份,因此它不会存储有关数据库角色或其他群集范围配置的信息。 要存储此信息并同时备份所有数据库,可以使用pg_dumpall

创建备份文件:

  pg_dumpall > pg_backup.bak

从备份还原所有数据库:

  psql -f pg_backup.bak postgres

使用Cron任务自动执行备份

您可能希望设置一个cron作业,以便定期自动备份数据库。 本节中的步骤将设置一个cron任务,每周运行一次pg_dump

确保以postgres用户身份登录:

  su - postgres

创建存储自动备份的目录:

  mkdir -p ~/postgres/backups

编辑crontab以创建新的cron任务:

  crontab -e

将以下行添加到crontab的末尾:

crontab

0 * * * 0 pg_dump -U postgres dbname > ~/postgres/backups/dbname.bak

保存并退出编辑器。您的数据库将在每个星期日的半夜12点进行备份。

下一步

PostgreSQL还提供了更高级的备份数据库方法。 官方文档描述了如何设置连续归档和时间点恢复。 这是一个复杂得多的过程,但它将维护数据库的持续存档,并使重放PostgreSQL的日志成为可能,以便在过去的任何时刻恢复数据库的状态。

如果您拥有一个非常大的数据库,虽然连续归档大型数据库会占用资源,但此方法也很有用。 由于该过程正在进行,因此无需进行频繁且耗时的完整备份。

更多信息

有关此主题的其他信息,您可能需要参考以下资源:


参考文献:《How to Back Up Your PostgreSQL Database》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

n+emlog后台主题模版设置修复

22930
来自专栏决胜机器学习

优化页面访问速度(一)——综述

优化页面访问速度,首先需要了解用户在浏览器输入url后,最终是如何看到所需的页面。在了解整个流程后,可以逐个步骤进行优化。

15640
来自专栏北京马哥教育

Linux中find命令用法全汇总,看完就没有不会用的!

糖豆贴心提醒,本文阅读时间7分钟 Linux 查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录...

33030
来自专栏黑泽君的专栏

Linux常用的服务器构建

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。

17320
来自专栏云计算教程系列

如何在Ubuntu 18.04上配置Node.js生产环境应用

Node.js是一个开源JavaScript运行环境,用于构建服务器端和网络应用程序。该平台可在Linux,macOS,FreeBSD和Windows上运行。虽...

17730
来自专栏Netkiller

Nginx 反向代理可以缓存 HTTP POST 请求页面吗?

本文节选自《Netkiller Web 手札》 作者:netkiller 网站:http://www.netkiller.cn 答案是可以! 因为nginx ...

54980
来自专栏企鹅号快讯

MongoDB副本集搭建

我们之前的案例都是在单个节点上实现的,在生产环境中这种做法是有风险的,如果服务宕机、崩溃或者硬盘坏了都会对公司业务造成损失,因此我们需要数据备份。在MongoD...

48070
来自专栏蘑菇先生的技术笔记

浅谈C#网络编程(二)

21640
来自专栏网络

shell全自动登录远程终端

先看效果 ? 你需要做的事情,在配置文件中配置服务器信息,选择对应的服务器,进行连接。 传统手工连接 弊端很明显,需要记服务器地址、ip、key位置、密码等,每...

331100
来自专栏jeremy的技术点滴

nginx使用备忘

321110

扫码关注云+社区

领取腾讯云代金券