博客
关于我
PostgreSQL Point-In-Time Recovery (Incremental Backup)
阅读量:795 次
发布时间:2023-03-03

本文共 2517 字,大约阅读时间需要 8 分钟。

PostgreSQL 点时间恢复(PITR)详解

什么是 PostgreSQL 点时间恢复(PITR)?

Point-in-Time Recovery(点时间恢复,简称 PITR)是 PostgreSQL 数据库的一种增量备份机制,也被称为在线备份或存档备份。PostgreSQL 服务器记录所有用户数据修改操作(如插入、更新或删除)的交易日志到称为“先进事务日志(WAL)”的文件中。WAL 文件使用先进的事务日志格式,记录了自上次全量备份以来数据库中所有的数据变更历史。通过利用 WAL 文件,可以在数据库发生故障后,恢复到最后一次全量备份时的状态。


PITR 的优势

1. 零下游时长

PITR 的关键优势是可以在不停机的情况下执行增量备份。与传统的全量备份相比,PITR 只需要备份自上次全量备份以来的 WAL 文件,而不需要锁定数据库或停止应用程序的运行。这样可以最大限度地减少业务中断时间。

2. 节省存储空间

与每日进行全量备份相比,PITR 只需要存储自上次全量备份以来的 WAL 文件。每次备份只需要传输最新的 WAL 文件,而不是整个数据库,这显著减少了存储空间的消耗。


如何配置 PostgreSQL 支持 PITR

要实现 PITR,需要对 PostgreSQL 的配置文件(postgresql.conf)进行一些更改。

1. 修改配置文件

vi postgresql.conf

添加以下内容:

archive_command = 'cp %p /usr/local/pgsql/pgDataPITR/wals/%f'onarchive_command = '%r'

2. 创建 WAL 存储目录

mkdir -p /usr/local/pgsql/pgDataPITR/wals

3. 重启数据库

pg_ctl stop -D /usr/local/pgsql/pgDataPITRpg_ctl start -D /usr/local/pgsql/pgDataPITR

WAL 文件的作用与管理

WAL 文件的作用是记录数据库中的所有数据变更操作。每当数据库中的数据发生修改时,PostgreSQL 会自动创建新的 WAL 文件。文件名采用特定的格式,例如 000000010000000000000006,每当文件大小达到 16MB 时,PostgreSQL 会自动创建新的文件。

WAL 文件的存储路径通常位于 /usr/local/pgsql/pgDataPITR/pg_xlog,而备份的 WAL 文件则存储在 /usr/local/pgsql/pgDataPITR/wals


数据模拟与备份流程

为了验证 PITR 的有效性,我们可以通过以下步骤进行数据模拟:

1. 创建测试表

# 使用 psql 创建测试表psql -c "create table testPITR1 (id serial, name text);"# 查看表结构psql -c "\q testPITR1"

2. 创建多个表

通过循环脚本可以自动创建多个表:

for i in 1..455252; do psql -c "insert into testPITR1 values (i, 'record' || i);"; done

3. 创建新表以测试恢复

psql -c "create table testPITR2 as select * from testPITR1;"

全量备份(Base Backup)

1. 创建全量备份标签

psql -c "select pg_start_backup('Full Backup - Testing');"

2. 使用 tar 格式进行备份

tar -cvzf /usr/local/pgsql/pgDataPITR/pgdatabk20081125.tar /usr/local/pgsql/pgDataPITR/

3. 停止备份并重启数据库

psql -c "select pg_stop_backup;"

恢复过程

在数据库故障后,恢复过程如下:

1. 重命名数据目录

mv pgDataPITR pgDataPITR.bad.data

2. 解压全量备份

tar -xvzf pgdatabk20081125.tarmv * /usr/local/pgsql/pgDataPITR

3. 启动数据库

pg_ctl start -D /usr/local/pgsql/pgDataPITR

4. 恢复未存档的日志文件

cp /usr/local/pgsql/pgDataPITR.bad.data/pg_xlog/* /usr/local/pgsql/pgDataPITR

5. 创建恢复配置文件

vi recovery.conf

配置内容如下:

restore_command = 'cp /usr/local/pgsql/pgbackup/wals/%f %p'recovery_target_time = '2008-11-25 18:08:06'

6. 启动数据库并执行恢复

pg_ctl start -D /usr/local/pgsql/pgDataPITR -l /usr/local/pgsql/pgDataPITR/pg.log

注意事项

  • 恢复时间的选择recovery_target_time 定义了恢复的目标时间。如果省略这一设置,PostgreSQL 会尽可能恢复所有未提交的事务。
  • 日志文件格式:恢复完成后,日志文件格式会发生变化,例如 00000001 会变成 00000002
  • 唯一恢复机会:PITR 只能执行一次。如果需要恢复到更早的时间点,必须从头开始恢复过程。

  • 总结

    PITR 是 PostgreSQL 数据库的重要功能,特别适用于需要高可用性的企业级应用。通过定期备份 WAL 文件和配置合适的恢复目标时间,可以有效降低数据丢失风险。在实际应用中,建议定期测试恢复流程,确保数据库在故障时能够快速恢复,保障业务连续性。

    转载地址:http://enxfk.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL 10.0 preview 变化 - pg_xlog,pg_clog,pg_log目录更名为pg_wal,pg_xact,log
    查看>>
    PostgreSQL 10.1 手册_部分 II. SQL 语言_第 15章 并行查询_15.2. 何时会用到并行查询?...
    查看>>
    PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
    查看>>
    PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色
    查看>>
    Qt开发——网络编程UDP网络广播软件之服务器端
    查看>>
    Postgresql 12.9如何配置允许远程连接
    查看>>
    PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析
    查看>>
    Postgresql CopyManager 流式批量数据入库
    查看>>
    PostgreSQL cube 插件 - 多维空间对象
    查看>>
    PostgreSQL Daily Maintenance - cluster table
    查看>>
    PostgreSQL on Linux 最佳部署手册
    查看>>
    PostgreSQL Oracle 兼容性之 - pipelined
    查看>>
    PostgreSQL Point-In-Time Recovery (Incremental Backup)
    查看>>
    postgresql Streaming Replication监控与注意事项
    查看>>