PostgreSQL码农集散地

每天5分钟PG聊通透第26期,为什么有备份但无法恢复?

参考文档点击文末阅读原文打开; 推荐《最好的PostgreSQL学习镜像》;


每天5分钟PG聊通透第26期,为什么有备份但无法恢复?

备份、订阅、恢复

2、为什么有备份但是不能恢复到指定时间点?   (时区指定有问题、目标时间早于全量备份到逻辑一致位点)

https://www.bilibili.com/video/BV1GV4y1C7Cg/

Postgresql 全量备份从2021-01-01 10:00:00开始, 2021-01-02 10:00:00结束, 并且备份了从2021-01-01 10:00:00开始到2021-01-03 10:00:00的所有wal日志, 请问如果2021-01-01 11:00:00 DROP了某个表, 是否能通过这个备份集恢复回来这张被drop的表的数据?

备份集A:

全量备份开始---------drop 某表------数据文件太多, 备份集里面没有备份到这个表的file------全量备份结束    
归档备份开始    

问题:

  • PITR, 使用备份集A恢复到“全量备份开始---------drop 某表” 之间的某个时刻.   请问是否可行?  如果可行, 恢复后某表还在吗?

先思考2个问题:

  • 未开启全量备份的时候, DROP操作是否会将该表的数据写入WAL?
  • 在开启全量备份(start backup)开始后, stop backup前, DROP操作是否会将该表的数据写入WAL?

思考题答案: DROP操作都不会将该表的数据写入WAL. 包括TRUNCATE也一样.

验证过程:

确保wal级别是replica以上    

    postgres=# show wal_level ;    
 wal_level    
-----------    
 replica    
(1 row)    

    创建测试表    

    postgres=# create table tbl (id int, info text, ct timestamp);    
CREATE TABLE    
postgres=# insert into tbl select generate_series(1,10000000), md5(random()::text), now();    
INSERT 0 10000000    
postgres=# vacuum tbl;    
VACUUM    
postgres=# checkpoint;    
CHECKPOINT    

    开启物理备份    

    postgres=# select pg_start_backup('abc');    
 pg_start_backup    
-----------------    
 1/A6000028    
(1 row)    

    记录物理备份开始时的wal位置    

    postgres=# select pg_current_wal_lsn();    
 pg_current_wal_lsn    
--------------------    
 1/A60000D8    
(1 row)    

    查看测试表的数据文件位置    

    postgres=# select pg_relation_filepath('tbl'::regclass);    
 pg_relation_filepath    
----------------------    
 base/14020/34126    
(1 row)    

    IT-C02YW2EFLVDL:~ digoal$ cd $PGDATA    
IT-C02YW2EFLVDL:data14 digoal$ ll base/14020/34126*    
-rw-------  1 digoal  staff   730M May  5 17:34 base/14020/34126    
-rw-------  1 digoal  staff   200K May  5 17:34 base/14020/34126_fsm    
-rw-------  1 digoal  staff    24K May  5 17:34 base/14020/34126_vm    

        删除测试表    

    postgres=# drop table tbl;    
DROP TABLE    

    查看被删除的表的数据文件是否已被清理    

    IT-C02YW2EFLVDL:data14 digoal$ ll base/14020/34126*    
-rw-------  1 digoal  staff     0B May  5 17:35 base/14020/34126    

    记录wal位置    

    postgres=# select pg_current_wal_lsn();    
 pg_current_wal_lsn    
--------------------    
 1/A601F310    
(1 row)    

    postgres=# checkpoint;    
CHECKPOINT    
postgres=# select pg_current_wal_lsn();    
 pg_current_wal_lsn    
--------------------    
 1/A601F3C0    
(1 row)    

    计算drop操作带来的wal消耗, 很明显DROP操作都不会将该表的数据写入WAL. 包括TRUNCATE也一样.    

    postgres=# select pg_size_pretty(pg_wal_lsn_diff('1/A601F3C0','1/A60000D8'));    
 pg_size_pretty    
----------------    
 125 kB    
(1 row)    

        备份开始后, 会记录一个wal文件的位置, 意味着这个备份集需要有从这个时刻开始的所有WAL日志, 才能用于恢复.    

    cd $PGDATA

    cat backup_label    
START WAL LOCATION: 1/A6000028 (file 0000000100000001000000A6)    
CHECKPOINT LOCATION: 1/A6000060    
BACKUP METHOD: pg_start_backup    
BACKUP FROM: primary    
START TIME: 2023-05-05 17:28:20 CST    
LABEL: abc    
START TIMELINE: 1    

        停止备份, 意味着PITR的时间点对应的wal必须在这之后.    

    postgres=# select pg_stop_backup();    
NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup    
 pg_stop_backup    
----------------    
 1/A601F420    
(1 row)    

本节结论:

  • PITR只能恢复到全量备份结束后的时刻.

思考题:

  • 为什么PG不考虑当前正在备份, 延迟删除数据文件呢? 这样的话, 备份开始时刻就可以成为PITR的选择时刻.

今日荐书

彩蛋:国产数据库周边生态

当然一款数据库要流行起来, 除了自己要强大, 还离不开生态. 用好周边生态工具, 管理水平战胜90%老司机!!! 下面简单介绍一下国产数据库周边生态.

1、管控软件

鸣嵩(前阿里云数据库总经理 / 研究员)等大佬们创业创办的云猿生, 核心产品是KubeBlocks. 他们的理念是让管理数据库和搭积木一样简单, 如果你要管理很多套并且种类(OLTP\OLAP\NoSQL\KV\TS\MQ等)很多的数据库产品, 推荐首选.

  • https://github.com/apecloud/kubeblocks

PG中文社区核心委员唐成老师的公司乘数开源的Clup, 专用管理PostgreSQL和PolarDB的集群管理软件, 如果你要管理很多套数据库, 推荐选择. 并且Clup还提供了企业版、自研的连接池、分布式存储、一体机、备份平台等, 是企业用户推荐之选.

  • https://www.csudata.com/

若航开源的pigsty, 集成了300多个PG插件的PG集群和PolarDB集群管理软件, 如果你要管理很多套PG或PolarDB数据库, 且对插件有特别多的需求, 推荐选择.

  • https://pigsty.cc/zh/

2、审计监控诊断优化

翟总(曾经是我背后的男人)到海信聚好看后研发的 DBdoctor, 采用ebpf技术, 在对数据库几乎没有影响的情况下实时监控数据库和服务器的各项指标, 发现和诊断问题根因非常方便.

  • https://www.dbdoctor.cn/

天舟老哥的核心产品Bytebase 是位于您和数据库之间的中间件。它是数据库 DevOps 的 GitLab/GitHub,专为开发人员、DBA 和平台工程师打造。

  • https://bytebase.cc/docs/introduction/what-is-bytebase/

PawSQL, SQL优化和诊断产品.  

D-Smart, Oracle老前辈白老大出品, 专注企业级市场, 将业界顶级DBA经验的产品化作品, 产品功能包括数据库监控、诊断、优化等.

  • https://www.modb.pro/db/567140

3、国产数据库IDE

IDE是开发者的必备工具,例如社区有pgAdmin, 国产IDE则可以看看老程序猿达刚老师的DeskUI:

  • https://www.deskui.com

4、数据同步&迁移&备份恢复

NineData, 老领导出去创业做的产品, 产品涵盖了数据同步、迁移、备份、比对、devops、chatDBA等.

  • https://www.ninedata.cloud/home

DSG, 非常老牌的数据库同步迁移企业级产品, 支持各种数据库的异构和同构迁移, 用他们的话说, 没有dsg搞不定的迁移, 比goldengate还牛.

  • https://www.dsgdata.com/

公开课

如果你对PolarDB学习感兴趣可以阅读这个公开课系列:

除了PolarDB还非常值得关注的几款PG栈国产数据库:

  • HaloDB(基于PG兼容PostgreSQL、Oracle、MySQL. http://www.halodbtech.com/ )、
  • IvorySQL(基于开源PG兼容PG、Oracle. https://www.ivorysql.org/zh-cn/ )、
  • ProtonBase(云原生分布式数仓. https://protonbase.com/ )、
  • 成都文武数据库(https://ww-it.cn)

参考文档点击阅读原文获得


感谢关注我的github (https://github.com/digoal/blog) 及视频号:

Image