定义
备份(backup):通过物理复制或逻辑导出的方式,将数据库的文件或结构和数据拷贝到其他位置进行存储;
还原(restore):是一种不完全的恢复。使用备份文件将数据库恢复到备份时的状态,该时间点之后的数据变更无法恢复;
恢复(recovery):先做还原,然后使用处于备份时间点至故障点产生的日志文件(WAL),将数据库恢复到最新状态;
分类
物理备份(Physical Backup):直接复制数据库相关的文件,一般情况,物理备份比逻辑备份快,占用的空间也更大。PostgreSQL支持在线、离线的物理备份,实际环境中应该以物理备份为主。
逻辑备份(Logical Backup):将数据库的结构和数据导出为sql文件,还原时通过文件中的SQL语句和命令重建数据库并恢复数据。逻辑备份通常需要更多的备份时间、还原时间。逻辑备份可以作为物理备份的补充,或者用于测试目的的数据导入导出。
方式
在线备份(Online Backup)、热备份(Hot Backup):pg处于启动状态时的备份;
离线备份(Offline Backup)、冷备份(Cold Backup):pg处于关闭状态时的备份;
方法
全量备份(Full Backup):一次备份所有,备份时间长,恢复时间短;
增量备份(Incremental Backup):备份与上一次改变的文件,备份时间短,恢复时间长;
差异备份(Differential Backup):针对第一次完全备份后发生变化的所有文件进行备份,备份、恢复时间居中;
pg通过一个基准备份(Base Backup),加上不断备份的事务日志文件(WAL),做到增量备份的效果。
工具
pg_dump:逻辑备份工具,支持单个数据库(可以指定模式、表)的导出,可以选择导出的格式;
pg_dumpall:逻辑备份工具,用于导出整个数据库集群,包括公用的全局对象;
pg_basebackup:物理备份工具,为数据库集群创建一个基准备份。或者设置基于日志传输或流复制的从节点的初始化;
psql:交互式命令行工具,也可以用于导入逻辑备份产生的 SQL 文件;
pg_restore:逻辑还原工具,用于还原 pg_dump 导出的归档格式的备份文件;
COPY:专有sql语句,将表中的数据复制到文件,或者将文件中的数据复制到表中;
第三方开源:pgAdmin、Barman、pg_probackup、pgBackRest
逻辑备份与还原
#plain格式:转储一个可读的脚本
pg_dump -U postgres -d hrdb -f "D:\bak\hrdb.sql"
#导入
pgsql -U postgres newdb -f "D:\bak\hrdb.sql"
#-Fc 自定义格式,不可直接查看
pg_dump -U postgres -d hrdb -f "D:\bak\hrdb.dmp" -Fc
#恢复
pg_restore -U postgres -d hrdb "D:\bak\hrdb.dmp"
备份整个pg
#连接每个数据库都要输入密码,可用密码选项代替
pg_dumpall -U postgres -f "D:\bak\cluster.sql"
#复原
psql -f "D:\bak\cluster.sql" postgres