如何备份 PostgreSql 数据库
单数据库
PostgreSql提供了 pg_dump 实用程序,来简化程序备份单个数据库的过程。必须以对要备份的数据库具有读取权限的用户身份运行此命令。
以postgres用户身份登录
sudo su - postgres
运行一下命令将数据库的内容转储到文件中,dbname数据库名称。
pg_dump dbname > dbname.bak
生成的备份文件dbname.bak
使用psql恢复数据库
# 恢复数据库,需要创建一个空数据库
psql test < dbname.bak
备份格式有几种选择
- *.bak:压缩二进制格式
- *.sql:明文转储
- *.tar:tarball
默认情况下,PostgreSql将忽略备份过程中发生的任何错误,这可能导致备份不完整。要防止这种情况,可以使用-1选项运行pg_dump命令,这会将整个备份过程视为单个事务,这将在发生错误时阻止部分备份。
所有数据库
由于pg_dump一次只创建一个数据库的备份,因此它不会存储有关数据库角色或其他集群范围配置的信息。要存储此信息并同时备份所有数据库,可以使用pg_dumpall。
创建备份文件
pg_dumpall > pgbackup.bak
从备份还原所有数据库
psql -f pg_backup.bak postgres
备份数据库
pg_dump -U postgres -f /tmp/postgres.sql postgres (导出postgres数据库保存为postgres.sql)
pg_dump -U postgres -f /tmp/postgres.sql -t test postgres (导出postgres数据库中表test的数据)
pg_dump -U postgres -F t -f /tmp/postgres.tar postgres (导出postgres数据库以tar形式压缩保存为postgres.tar)
恢复数据库
psql -U postgres -f /tmp/postgres.sql bk01 (恢复postgres.sql数据到bk01数据库)
# pg_restore -- 从pg_dmup创建的备份文件中恢复PostgreSql数据库,用于恢复由pg_dump转储的任何非纯文本格式中的PostgreSql数据库。
pg_restore -U postgres -d bk01 /tmp/postgres.tar (恢复postgres.tar数据到bk01数据库)