如果您在生产环境中使用PostgreSQL,请务必采取预防措施以确保用户的数据不会丢失。通过频繁备份数据库或使用cron任务自动执行备份,您将能够在数据库丢失或损坏的情况下快速还原系统。幸运的是,PostgreSQL包含的工具使这项任务变得简单易行。
在开始本教程之前,您应该在系统上安装PostgreSQL。浏览我们如何在Ubuntu教程上安装PostgreSQL以安装PostgreSQL并创建一个示例数据库。
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任务,每周运行一次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》
点击加载更多