概述
Create a named point for performing restore using pg_create_restore_point.
使用pg_create_restore_point创建执行恢复的named point。
pg_create_restore_point(name text)
为执行恢复创建一个命名点(默认只限于超级用户,但是可以授予其他用户 EXECUTE 特权来执行该函数)
试验
增量备份切换到 postgres 用户下mkdir -p /opt/pg_root/backups 存放基础备份mkdir -p /opt/pg_root/archive_wals 存放归档修改postgresql.conf中的配置postgres@bogon-> vi $PGDATA/postgresql.confwal_level = replicaarchive_mode = onarchive_command = '/usr/bin/lz4 -q -z %p opt/pg_root/archive_wals/%f.lz4'postgres@bogon-> pg_ctl restart 重启DB创建基础备份postgres@bogon-> pg_basebackup -Ft -Pv -Xf -z -Z5 -h 127.0.0.1 -p 5432 -D opt/pg_root/backups/pg_basebackup: initiating base backup, waiting for checkpoint to completepg_basebackup: checkpoint completedpg_basebackup: write-ahead log start point: 0/7000028 on timeline 152727/52727 kB (100%), 2/2 tablespacespg_basebackup: write-ahead log end point: 0/7000138pg_basebackup: syncing data to disk ...pg_basebackup: renaming backup_manifest.tmp to backup_manifestpg_basebackup: base backup completed设置还原点创建还原点的系统函数为:pg_create_restore_pointpostgres=# SELECT pg_create_restore_point('domac-202107211846');2021-07-12 06:46:35.487 EDT [126444] LOG: restore point "domac-202107211846" created at 0/80000C82021-07-12 06:46:35.487 EDT [126444] STATEMENT: SELECT pg_create_restore_point('domac-202107211846');pg_create_restore_point-------------------------0/80000C8(1 row)恢复到指定还原点创建一张测试表postgres=# CREATE TABLE restore(postgres(# id SERIAL PRIMARY KEY,postgres(# ival INT NOT NULL DEFAULT 0,postgres(# description TEXT,postgres(# created_time TIMESTAMPTZ NOT NULL DEFAULT now());CREATE TABLE插入测试数据postgres=# INSERT INTO restore (ival) VALUES (1);postgres=# INSERT INTO restore (ival) VALUES (2);postgres=# INSERT INTO restore (ival) VALUES (3);postgres=# INSERT INTO restore (ival) VALUES (4);postgres=# select * from restore;id | ival | description | created_time----+------+-------------+-------------------------------1 | 1 | | 2021-07-12 06:49:12.006791-042 | 2 | | 2021-07-12 06:49:12.156632-043 | 3 | | 2021-07-12 06:49:12.165001-044 | 4 | | 2021-07-12 06:49:13.176974-04(4 rows)切换下WAL产生归档postgres=# select pg_switch_wal();pg_switch_wal---------------0/801B388(1 row)创建一个还原点postgres=# select pg_create_restore_point('domac-1014');2021-07-12 06:51:49.665 EDT [126444] LOG: restore point "domac-1014" created at 0/90000C82021-07-12 06:51:49.665 EDT [126444] STATEMENT: select pg_create_restore_point('domac-1014');pg_create_restore_point-------------------------0/90000C8(1 row)删除表中全部数据postgres=# delete from restore;DELETE 4恢复试验停止数据库postgres@bogon-> pg_ctl -m f stop移除旧的数据目录,将基础备份还原postgres@bogon-> mv opt/pg_root13/ /opt/pg_root13_bakpostgres@bogon-> mkdir opt/pg_root13postgres@bogon-> tar -xvf opt/pg_root/backups/base.tar.gz -C /opt/pg_root13修改restore_command recovery_target_name参数restore_command = '/usr/bin/lz4 -d /opt/pg_root/archive_wals/%f.lz4 %p'recovery_target_name = 'domac-1014'然后启动数据库进入恢复状态postgres@bogon-> pg_ctl startwaiting for server to start....2021-07-12 07:00:32.863 EDT [127392] LOG: starting PostgreSQL 13.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit2021-07-12 07:00:32.864 EDT [127392] LOG: listening on IPv4 address "0.0.0.0", port 54322021-07-12 07:00:32.866 EDT [127392] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"2021-07-12 07:00:32.872 EDT [127393] LOG: database system was interrupted; last known up at 2021-07-12 06:43:14 EDT2021-07-12 07:00:32.916 EDT [127393] LOG: redo starts at 0/70000282021-07-12 07:00:32.917 EDT [127393] LOG: consistent recovery state reached at 0/70001382021-07-12 07:00:32.917 EDT [127393] LOG: redo done at 0/70001382021-07-12 07:00:33.028 EDT [127392] LOG: database system is ready to accept connectionsdoneserver started
参考
https://www.postgresql.org/about/featurematrix/detail/207/
http://postgres.cn/docs/12/functions-admin.html#FUNCTIONS-ADMIN-BACKUP
文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




