逻辑备份恢复
pg_dump/pg_restore
逻辑备份通过读取数据库记录集,且将记录集写入文本文件或自定义转储格式来实现这种记录集的读出与物理位置无关
-
备份:
- pg_dump :只能针对一个数据库
- pg_dumpall :针对整个数据库簇
-
恢复:
- 生成的文本可以使用 psql 进行恢复
- 纯数据可以用 copy 恢复
- 自定义转储格式只能使用 pg_restore 恢复
pg_dump/pg_restore参数说明
-h, --host=HOSTNAME :连接到指定数据库主机地址
-p, --port=PORT :连接到指定数据库端口
-U,--username=NAME :连接使用的用户名
-d, --dbname =DBNAME :导出的数据库名字
-j, --jobs=NUM :导出并发数
-f, --file=FILENAME :导出文件名
-F, --format= c|d|t|p :导出数据格式(二进制 | 目录 | tar | text)
-n, --schema=schema :导出指定schema
-t, --table=table :导出指定表(到处多个表 -t t1 -t t2 -t t3 ...)
-s, --schema only :只导出对象定义不导出数据(只导元数据)
-Z0~9 :使用 gzip 压缩
-c :创建对象前先删除
-C :创建对象
-disable triggers :禁用触发器
-S, --superuser =username :指定超级用户
例:
一、单库
备份
pg_dump -Fc -d testdb -f /u01/pgsql11/backup/testdb.dmp
恢复
--自动建库恢复
pg_restore -Fc -C -d postgres /u01/pgsql11/backup/testdb.dmp
--手工建库恢复
create database testdb;
pg_restore -Fc -d testdb /u01/pgsql11/backup/testdb.dmp
--单表恢复
pg_restore -Fc -d testdb -t t111 /u01/pgsql11/backup/testdb.dmp
二、单表
pg_dump -d testdb -t t111 -f /u01/pgsql11/backup/t111.sql
psql -d testdb -f /u01/pgsql11/backup/t111.sql
三、压缩
pg_dump -d testdb -t t111 -Z5 -f /u01/pgsql11/backup/t111.sql.gz
gunzip -c /u01/pgsql11/backup/t111.sql.gz | psql -d testdb
四、并行
要求目录为空,目录不存在则创建
pg_dump -d testdb -j 4 -Fd -f /u01/pgsql11/backup/testdbj4
pg_restore -d postgres -j 4 -C -Fd db /u01/pgsql11/backup/testdbj4
五、pg_dumpall
只能导出全库,且只能为文本文件,一般库不推荐
pg_dumpall > full.txt
psql -f full.txt
恢复的时候注意,postgres库必须存在,不然恢复不了
一旦恢复建议每个库analyze
运行vacuumdb -a -z来分析所有数据库