什么是PostgreSQL?
PostgreSQL是一个现代化的数据库管理系统。它经常用于存储和操纵与网站和应用程序相关的信息。 与任何有价值的数据一样,重要的是实施备份方案以防止数据丢失。本指南将涵盖一些可用于备份PostgreSQL数据的实用方法。 我们将使用Ubuntu 12.04 VPS与PostgreSQL 9.1。大多数现代发行版和最新版本的PostgreSQL将以类似的方式运行。
如何使用pg_dump备份PostgreSQL数据库
PostgreSQL包含一个称为可用于转储数据库信息转换成用于备份的文件
“pg_dump的 ”实用。 pg_dump实用程序从Linux命令行运行。该命令的基本语法是:
pg_dump name_of_database > name_of_backup_file
该命令必须由具有读取所有数据库信息的权限的用户运行,因此它在大多数时间作为超级用户运行。 对于现实世界的例子,我们可以登录到“postgres”用户并在默认数据库上执行命令,也称为“postgres”:
sudo su - postgres
pg_dump postgres > postgres_db.bak
此命令实际上是一个PostgreSQL客户端程序,因此只要该系统可以访问数据库,它就可以从远程系统运行。 如果希望备份远程系统,可以传递用于指定远程主机的“-h”标志,以及给远程端口的“-p”标志:
pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file
如果需要,还可以使用“-U”选项指定其他用户。语法将是:
pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file
请记住,对于任何其他客户端程序,pg_dump存在相同的身份验证要求。这意味着您必须确保您的登录凭据对您尝试备份的系统有效。
如何从pg_dump与PostgreSQL恢复数据转储
要恢复一个由pg_dump创建的备份,你可以重定向文件到
PSQL标准输入:
psql empty_database < backup_file
注意:此重定向操作不会创建有问题的数据库。
这必须在运行命令之前在单独的步骤中完成。 例如,我们可以创建一个名为“restored_database”的新数据库,然后通过发出以下命令重定向名为“database.bak”的转储:
createdb -T template0 restored_database
psql restored_database < database.bak
空数据库应使用“template0”作为基础创建。 为了正确恢复,必须执行的另一步骤是重新创建对数据库中的对象拥有或具有授予权限的任何用户。 例如,如果您的数据库具有用户“test_user”所拥有的表,则您必须在导入之前在恢复系统上创建它:
createuser test_user
psql restored_database < database.bak
处理恢复错误
默认情况下,PostgreSQL将尝试继续还原数据库,即使在此过程中遇到错误。 在许多情况下,由于明显的原因这是不希望的。尝试找出将数据库恢复到其正确状态所需的操作可能很痛苦。 我们可以告诉PostgreSQL停止任何错误,通过键入:
psql --set ON_ERROR_STOP=on restored_database < backup_file
这将导致PostgreSQL恢复操作在遇到错误时立即停止。 这将仍然留下一个残缺的数据库,还没有完全恢复,但你现在可以处理错误,因为他们来了,而不是处理一个错误列表在结束。 在许多情况下,更好的选项可以是“-1”(第一个)或“--single-transaction”选项:
psql -1 restored_database < backup_file
此选项在单个事务中执行所有恢复细节。 此选项和“ON_ERROR_STOP”设置之间的区别是,这将完全成功或不导入任何内容。 这对于较大的修复体而言可能是一种昂贵的权衡,但在许多情况下,不让您保留部分恢复的数据库的好处远远超过了成本。
如何备份和恢复PostgreSQL中的所有数据库
为了节省时间,如果你想备份系统中所有的数据库,有一个名为“
是pg_dumpall”实用工具。 它们的命令语法与常规pg_dump命令非常相似,但它不指定数据库。相反,该命令备份每个可用的数据库:
pg_dumpall > backup_file
您可以通过将文件传递到带有默认数据库的psql来恢复数据库:
psql -f backup_file postgres
结论
备份是任何类型的数据存储计划中的一个重要组件。幸运的是,PostgreSQL为您提供了有效备份重要信息所需的实用程序。 与任何类型的备份一样,定期测试备份以确保可以正确还原创建的副本很重要。您创建的备份仅在实际可用于恢复系统时才有用。