您的位置:首页 > 数据库

Postgresql日志系统的实现(二)

2017-03-13 18:49 288 查看

1.2   即时恢复(PITR)与时间线

在任何时候,PostgreSQL 都在集群的数据目录的 pg_xlog/ 子目录里维护着一套预写日志(WAL)。 这些日志记录着每一次对数据库的数据文件的修改的细节。包括某事务插入日志前那一刻的系统时间信息。这个时间信息的存在,使得可以在恢复时,基本上可以指定崩溃前的任何时刻进行恢复。这就是: 即时恢复: 我们可以把数据库恢复到你开始备份以来的任意时刻的状态。   另外,PostgreSQL 有个叫时间线的概念。是用于恢复阶段的。可以把恢复的到达点和系统继续运行后又记载的信息区分开,以利于防止再发生崩溃后进行的恢复。 每次即时恢复到一个比 WAL 序列的结尾要早的时刻,那么就创建一个新的时间线, 以表示在该次恢复之后生成的 WAL 记录(不过,如果恢复动作一直处理到 WAL 的结尾, 我们就不会开始一个新的时间线:我们只是扩展现有那个)。时间线 ID 号是 WAL 段文件名的一部分, 因此新的时间线并不会覆盖以前的时间线生成的 WAL 数据。实际上我们可以归档许多不同的时间线。 虽然这些看起来像没用的特性,但它却可能常常是救命稻草。考虑一下你并不很确信应该恢复到哪个时刻的情况, 这个时候你不得不做好几次试验性即时恢复然后从中找到旧历史中最好的分支。 如果没有时间线,那么这个过程可能很快就会导致无法管理的混乱。 有了时间线,你可以恢复到任意以前的状态, 包括恢复到后来放弃的时间线分支的状态。在PG中,时间线也在checkpoint的信息中保存有一份(checkpoint保存在pg_control文件的信息中,在PG中可以搜索“TimeLineID”查看相应代码,关于时间线,有一些相关的函数实现其对应的操作)。注意,在写页面信息时,有如下两个函数比较重要:     PageSetLSN(page, lsn);
    PageSetTLI(page, ThisTimeLineID)
    通常,PG提倡使用多台机器组成集群以运行PG。持续把 WAL 文件序列填充给其它装载了同样的基础备份文件的机器,就有了一套"热备份"系统:在任何点都可以启动第二台机器, 而它拥有近乎当前的数据库拷贝。这样提供了较高的可靠性。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: