1. 环境
OS版本:centos 6.9
数据库版本:postgreSql 9.6.3
2. 备份数据库
进入postgreSql安装目录的bin文件夹下,使用pg_dump工具进行备份。
a. 备份整个数据库
//导出表结构和数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -f ~/mydb_20180503.sql
//导出表结构和数据(含drop table之类的语句)
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -c -f ~/mydb_20180503.sql
//只导出表结构
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -s -f ~/mydb_20180503.sql
//只导出数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -a -f ~/mydb_20180503.sql
b. 备份指定模式下的数据
//导出表结构和数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -n schema1 -f ~/mydb_20180503.sql
//导出表结构和数据(含drop table之类的语句)
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -n schema1 -c -f ~/mydb_20180503.sql
//只导出表结构
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -n schema1 -s -f ~/mydb_20180503.sql
//只导出数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -W -d mydb -n schema1 -a -f ~/mydb_20180503.sql
c. 备份指定的表
//导出表结构和数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -d mydb -t schema1.t_web -f web.sql
//只导出表结构
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -d mydb -t schema1.t_web -s -f web.sql
//只导出数据
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -d mydb -t schema1.t_web -a -f web.sql
//表名含大小写(包括全大写)的情况
./pg_dump -h 192.168.1.16 -p 5432 -U sa -O -d mydb -t schema1.\"t_Web\" -f web.sql
d. 参数详情:
-h: 数据库IP(192.168.1.16)
-p: 数据库端口(5432)
-U: 用户名(sa)
-O: 导出文件不指定owner(无值)
-W: 需要输入密码(无值。貌似不添加该项仍然需要输入密码)
-c: 导出表结构时,会包含drop table之类语句
-s: 只导出表结构(无值。如果要导出数据,不要设置该选项)
-a: 只导出数据(无值。如果要导出建表语句等,不要设置该选项)
-d: 数据库名(mydb)
-n: 模式名(schema1。不添加该项则表示所有模式都备份)
-f: 导出文件路径和名称(~/mydb_20180503.sql)
-t: 表名(schema1.t_web。如果不输入模式名,一般默认模式为public)
3. 恢复数据库
进入postgreSql安装目录的bin文件夹下,使用psql工具进行数据恢复。
a. 如果恢复数据存在模式改变(不存在则忽略此步骤)
修改备份文件,指定新模式名和所属用户。
打开备份文件mydb_20180503.sql,找到以下几行,将模式schema1和用户sa分别修改成新的模式名和用户名。如果导出的时候添加了-O选项,则备份文件里面没有OWNER。
CREATE SCHEMA schema1 ;
ALTER SCHEMA schema1 OWNER TO sa;
SET search_path = schema1 , pg_catalog;
b. 导入备份文件
./psql -h 192.168.1.17 -p 5432 -U sa2 -d mydb2 -W -f ~/mydb_20180503.sql
c. 参数详情:
参考上文pg_dump。