postgres数据库的备份与恢复

postgres数据库的备份与恢复用到pg_dump命令:
如果是备份与恢复本地postgres数据库
进入postgres并查看数据库

su - postgres
psql
\l
                                      资料库列表
    名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    |       存取权限        
------------+----------+----------+-------------+-------------+-----------------------
 activities | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 backstage  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 db1        | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 exchange   | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 postgres   | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
 template1  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
(7 行记录)

我们可以看到有这些数据库,其中如果我想备份backstage这个数据库,首先\q退出数据库,使用pg_dump命令。

-bash-4.2$ pg_dump backstage > ./backstage.bak
-bash-4.2$ ls
10  backstage.bak  exchange.bak  psql.backup  psql.backup.tar
-bash-4.2$ 

可以看到backstage数据库已经被备份导出为backstage.bak文件。
backstage是数据库名,./backstage.bak是文件以及保存路径。
psql再次进入数据库,我们删除backstage数据库:

postgres=# drop database backstage;
DROP DATABASE

\l再次查看

postgres=# \l
                                      资料库列表
    名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    |       存取权限        
------------+----------+----------+-------------+-------------+-----------------------
 activities | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 db1        | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 exchange   | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 postgres   | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
 template1  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
(6 行记录)

数据库backstage已经被删除。
现在恢复数据库backstage。

首先创建backstage数据库
create database backstage;
\c backstage 切换到backstage数据库
接下来使用\i命令恢复数据库
\i backstage.bak
恢复完成后我们再次 \c backstage切换到backstage数据库
\d 查看backstage中的表结构已经恢复。


backstage=# \c backstage 
psql (9.2.24, 服务器 10.11)
警告:psql 版本9.2, 服务器版本10.0.
一些psql功能可能无法工作.
您现在已经连线到数据库 "backstage",用户 "postgres".
backstage=# \d
                          关联列表
 架构模式 |             名称             |  型别  |  拥有者  
----------+------------------------------+--------+----------
 public   | account_vols                 | 资料表 | postgres
 public   | account_vols_id_seq          | 序列数 | postgres
 public   | admin_favs                   | 资料表 | postgres

远程备份与恢复需要用到pgcli工具连接远程数据库之后再备份与恢复。
首先安装pgcli

yum -y install python-pip
pip install pgcli

备份数据库依旧使用pg_dump命令,格式为:
pg_dump -h ip -p port -U user databasename > databasename.bak
或者:
pg_dump - ip -p port -U user -f /databasename.bak databasename(数据库名)
恢复数据库:
首先使用pgcli连接数据库:
pgcli -h ip -p port -U user
连接上之后切换到要导入数据的数据库,如果没有就创建,之后使用\i databasename.bak
恢复数据库。
\i databasename.bak

如果恢复不成功使用此命令:
psql -h IP -p port -U postgres -d databasename < databasename.bak

你可能感兴趣的:(postgres数据库的备份与恢复)