暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG17新特性-块级别增量备份

中启乘数 2024-10-14
613
PostgreSQL可以通过pg_basebackup进行全量备份,但增量备份则需要借助归档之类的方法实现。刚发布的PostgreSQL17在pg_basebackup中新增了增量备份的功能。并新增了一个pg_combinebackup命令用于合并备份。本文就把这个新特性给大家做个分享。

准备:

使用这个特性需要在数据库打开此参数:
    ALTER system SET summarize_wal = ON;
    SELECT pg_reload_conf();
    创建测试表,并造数:
      create table test(t int);
      insert into test values (now());


      postgres=# select * from test;
      t
      ---
      1
      (1 row)

      进行全量备份

        pg_basebackup -Fp -D backup/$(date +%Y-%m-%d_%H%M%S-FULL)
        相对于旧版本的pg_basebackup,PG17的pg_basebackup命令生成的备份文件多了一个backup_manifest文件,该文件记录的是每个checkpoint周期的WAL日志中记录的变动的block等信息。用于增量备份。
        在数据库中修改测试表:
          update test set t = 2;


          postgres=# select * from test;
          t
          ---
          2
          (1 row)
          进行增量备份:
          在正常的pg_basebackup命令后加-i参数指定上一个备份的backup_manifest文件。
            pg_basebackup -Fp -D backup/$(date +%Y-%m-%d_%H%M%S-INCREMENTAL) -i backup/2024-10-12_104609-FULL/backup_manifest
            再修改测试表,以该增量备份做新的增量备份:
              update test set t = 3;


              postgres=# select * from test;
              t
              ---
              3
              (1 row)
                pg_basebackup -Fp -D backup/$(date +%Y-%m-%d_%H%M%S-INCREMENTAL) -i backup/2024-10-12_104932-INCREMENTAL/backup_manifest
                合并增量备份:
                (1)合并目前所有备份:
                  cd /backup


                  pg_combinebackup 2024-10-12_104609-FULL 2024-10-12_104932-INCREMENTAL 2024-10-12_105214-INCREMENTAL -o 2024-10-12_105214-FULL
                  注意合并的备份要保证顺序和连续性。
                  当增量备份数量繁多时,如果增量备份目录名称在/backup目录下的排列顺序和增量备份的连续性相同时,可以使用*等通配符来指定增量备份。本文的增量备份目录名称就符合这种规则,如下所示:
                    pg_combinebackup 2024-10-12_104609-FULL *-INCREMENTAL -o 2024-10-12_105214-FULL
                    注意命令中全量备份必须要有,并且要写在第一位。
                    启动合并后的备份数据库:
                      pg_ctl start -D /backup/2024-10-12_102544-FULL -o '-p 5433'
                      登录恢复的数据库,查看test表数据,此时的数据是最新的,实现了增量备份与恢复。
                        postgres=# select * from test;
                        t
                        ---
                        3
                        (1 row)
                        (2)合并全量备份和部分增量备份
                        同时也可以选择合并到指定增量备份的数据库,比如不合并到最新的增量备份而是合并到中间某个增量备份的状态并恢复。
                          pg_combinebackup 2024-10-12_104609-FULL 2024-10-12_104932-INCREMENTAL  -o 2024-10-12_104932-FULL
                          启动合并后的备份数据库:
                            pg_ctl start -D /backup/2024-10-12_104932-FULL -o '-p 5434'
                            查询test测试表,该表的数据则是截止到该增量备份的值。
                              postgres=# select * from test;
                              t
                              ---
                              2
                              (1 row)

                              注意事项:

                              • 合并备份时,需要全量备份处于第一位,并且增量备份需要保持顺序和连续性。
                              • pg_combinebackup工具并不会做文件缺失等验证性工作,所以在合并备份之前要先使用pg_verifybackup工具对备份进行提前验证。


                              文章转载自中启乘数,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论