首页
解决方案
技术服务
专业数据库维保服务 大数据维保服务
一体机
Oracle数据库一体机 PolarDB数据库一体机 瀚高数据库一体机 崖山数据库一体机 海扬数据库一体机 高斯数据库一体机 金仓数据库一体机
产品
CLup乘数云统一平台 CData高性能数据库云一体机 CPDA高性能双子星数据库机 CBackup数据库备份恢复云平台 CMiner: PostgreSQL中的CDC CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品 APCC: Greenplum管理平台
文档
文章
客户及伙伴
中启开源
关于我们
登录
×
修改密码

PostgreSQL的PIRT恢复

基于备份集的恢复比较简单,直接使用备份进行恢复,但是在实际环境中我们可能会遇到数据误删除需要指定恢复到某一时间点

实验步骤

总体步骤如下:

基础备份

  1. pg_basebackup -X s -P -F t -U postgres -D /backup/
  2. [postgres@pg39 backup]$ ls -ltr
  3. total 40104
  4. -rw-rw-r-- 1 postgres postgres 24284160 May 6 01:47 base.tar
  5. -rw------- 1 postgres postgres 16779264 May 6 01:47 pg_wal.tar

备份完成后会看到生成两个tar文件,其中pg_wal是由于备份时添加了-X s参数的原因

插入新数据

  1. [postgres@pg39 backup]$ psql
  2. psql (10.3)
  3. Type "help" for help.
  4. postgres=# insert into dhytest values (10);
  5. INSERT 0 1
  6. postgres=# insert into dhytest values (20);
  7. INSERT 0 1
  8. postgres=# insert into dhytest values (30);
  9. INSERT 0 1
  10. postgres=# insert into dhytest values (40);
  11. INSERT 0 1
  12. postgres=# insert into dhytest values (50);
  13. INSERT 0 1
  14. postgres=# select now();
  15. now
  16. -------------------------------
  17. 2018-05-06 01:51:52.664137+08

删除数据

  1. postgres=# delete from dhytest where id = 40;
  2. DELETE 1
  3. postgres=# select now();
  4. now
  5. -------------------------------
  6. 2018-05-06 01:52:31.409248+08
  7. (1 row)
  8. [postgres@pg39 backup]$ psql
  9. psql (10.3)
  10. Type "help" for help.
  11. //切换几个wal日志
  12. postgres=# select pg_switch_wal();
  13. pg_switch_wal
  14. ---------------
  15. 0/18000730
  16. (1 row)
  17. postgres=# select pg_switch_wal();
  18. pg_switch_wal
  19. ---------------
  20. 0/19000078
  21. (1 row)

基于备份做指定时间点的恢复

验证数据是否恢复

  1. [postgres@pg39 backup]$ pg_ctl start -D /backup/
  2. waiting for server to start....2018-05-06 02:01:35.282 CST [4404] LOG: listening on IPv4 address "0.0.0.0", port 5432
  3. 2018-05-06 02:01:35.282 CST [4404] LOG: listening on IPv6 address "::", port 5432
  4. 2018-05-06 02:01:35.285 CST [4404] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
  5. 2018-05-06 02:01:35.292 CST [4404] LOG: redirecting log output to logging collector process
  6. 2018-05-06 02:01:35.292 CST [4404] HINT: Future log output will appear in directory "log".
  7. done
  8. server started
  9. [postgres@pg39 backup]$ psql
  10. psql (10.3)
  11. Type "help" for help.
  12. postgres=# select * from dhytest;
  13. id
  14. ----
  15. 10
  16. 20
  17. 30
  18. 40
  19. 50
  20. (5 rows)

恢复大致原理

基于时间点恢复主要过程就是利用全备+WAL日志,将数据库推至一个指定的状态。在恢复时我们需要注意WAL日志是否完整,如果归档目录下WAL日志不能恢复到指定时间点需要拷贝最新的WAL日志到归档目录下,才能继续恢复。