PostgreSQL的备份恢复
备份:
物理备份、逻辑备份。
物理备份
文件的copy,创建备份点后执行文件copy(pg_start_backup,copy file,pg_stop_backup;),或者直接执行pg_basebackup;
目前只支持全备份,如需支持差异备份:1级,2级,需使用其他插件。如:backuprest
backup_label:
START WAL LOCATION: 0/B060C10 (file 0000000E000000000000000B) ----启动steam replication使用的日志点
CHECKPOINT LOCATION: 0/B060C48 ----检查点时间
BACKUP METHOD: pg_rewind ----备份方式
BACKUP FROM: standby ----备份来源
START TIME: 2020-01-13 00:06:27 PST ----备份时间
还原流程:
1.读取pg_control file,若是PITR则从backup_label中读取checkpoint location;
2.根据recovery.conf(12版本放到postgres.conf中)的restore_command,recovery_target_time,recovery_target_timeline等参数;
3.从归档目录中恢复wal到$PGDATA/pg_wal中;
4.重放wal日志数据;
5.恢复完成后暂停/重新生成新的timeline history file;
逻辑备份
数据逻辑导出,数据保持一致性状态,pg_dump(单库)/pg_dumpall(全实例所有库);
- 支持压缩,本地进行压缩,需考虑CPU消耗,注意远程备份是在本地进行压缩。
- 支持多分任务,只有pg_dump -Fd情况下配合-j <nums>支持。
- 支持只导出对象定义 -s / -a数据
恢复方式:
--psql执行语句;
--纯数据可以使用copy;
--自定义格式-Fc,只能使用restore
eg:逻辑备份
备份db1库:
pg_dump -Fp -f /tmp/db1.sql db1
恢复db1库:
psql db1 atlasdb -f /tmp/db1.sql
备份db1库:
pg_dump -Fc -f /tmp/db1.dump db1
恢复db1库:
pg_restore -Fp -C -d atlasdb /tmp/a.sql
eg:物理备份
备份:
开启归档: archive_mode = on; archive_command = 'cp %p /tmp/wakbak/%f';
执行备份:
pg_basebackup -d /databack -Ft -v -P -Xs
还原:
tar -xf /databack/base.tar -C $PGDATA
tar -xf /databack/pg_wal.tar -C $PGDATA/pg_wal
表空间根据情况进行解压