Postgresql - Point In Time Recovery (PITR)

数据库的PITR是一般数据库都必须满足的技术。其原理是依据之前的物理备份文件加上wal的预写日志模式备份做的恢复。

直接拿实验说话:

环境 CentOS 7 + PG 10.8

0. 初始化数据库

initdb -D /usr/local/pgsql/data/
......
Success. You can now start the database server using:
    pg_ctl -D /usr/local/pgsql/data/ -l logfile start
service postgresql_5432 start

psql -U postgres

postgres=# create user dbadmin superuser ;
CREATE ROLE
postgres=# create user mytest superuser ;
CREATE ROLE
postgres=# create database mytest owner mytest;
CREATE DATABASE

1. 配置参数

vim postgresql.conf

archive_mode = on     
archive_command = 'cp %p /home/postgres/pg_wal/%f'   
archive_timeout = 3600
wal_level = replica

service postgresql_5432 restart

2. 备份

su - postgres
mkdir /home/postgres/backup/
pg_basebackup -Ft -X -D /home/postgres/backup/

3. 测试数据

mytest=# create table test (id serial primary key, col varchar(1000), ctime timestamp without time zone default now());
CREATE TABLE
insert into test (col) values ('a');
insert into test (col) values ('b');
insert into test (col) values ('c');

mytest=# select * from test;
 id | col |           ctime
----+-----+----------------------------
  1 | a   | 2019-06-18 03:57:12.767601
  2 | b   | 2019-06-18 03:57:12.772068
  3 | c   | 2019-06-18 03:57:13.572814
  4 | a   | 2019-06-18 03:57:14.982699
  5 | b   | 2019-06-18 03:57:14.985398
  6 | c   | 2019-06-18 03:57:16.181587
  7 | a   | 2019-06-18 03:57:20.958266
  8 | b   | 2019-06-18 03:57:20.960301
  9 | c   | 2019-06-18 03:57:21.653256
(9 rows)

mytest=# select pg_switch_wal();
 pg_switch_wal
---------------
 0/30251D0
(1 row)

4. 删除数据库

模拟数据库宕机或修改错误数据

service postgresql_5432 stop
rm -rf /usr/local/pgsql/data/*

5. 恢复

5.1 解压基础备份文件

找到备份文件

cd /home/postgres/backup/
tar xvf base.tar -C /usr/local/pgsql/data/
tar xvf pg_wal.tar -C /usr/local/pgsql/data/

5.2 配置恢复文件 recovery.conf

vim recovery.conf
restore_command = 'cp /home/postgres/pg_wal/%f %p'
recovery_target_time = '2019-06-18 03:57:13.572814'

chown -R postgres:postgres recovery.conf
chmod 700 /var/lib/pgsql/10/data
chmod 700 /usr/local/pgsql/data

5.3 启动

service postgresql_5432 start

6. 查看

mytest=# select * from test;
 id | col |           ctime
----+-----+----------------------------
  1 | a   | 2019-06-18 03:57:12.767601
  2 | b   | 2019-06-18 03:57:12.772068
(2 rows)

7. 向前推进

7.1

service postgresql_5432 stop
vim recovery.conf
restore_command = 'cp /home/postgres/pg_wal/%f %p'
recovery_target_time = '2019-06-18 03:57:14'

观察日志

2019-06-18 04:10:29.787 EDT [24681] LOG:  database system was shut down in recovery at 2019-06-18 04:09:37 EDT
2019-06-18 04:10:29.788 EDT [24681] LOG:  starting point-in-time recovery to 2019-06-18 03:57:14-04
2019-06-18 04:10:29.841 EDT [24681] LOG:  restored log file "000000010000000000000002" from archive
2019-06-18 04:10:29.895 EDT [24681] LOG:  redo starts at 0/2000060
2019-06-18 04:10:29.943 EDT [24681] LOG:  restored log file "000000010000000000000003" from archive
2019-06-18 04:10:29.996 EDT [24681] LOG:  consistent recovery state reached at 0/3024D00
2019-06-18 04:10:29.996 EDT [24681] LOG:  recovery stopping before commit of transaction 568, time 2019-06-18 03:57:14.983236-04
2019-06-18 04:10:29.996 EDT [24681] LOG:  recovery has paused
2019-06-18 04:10:29.996 EDT [24681] HINT:  Execute pg_wal_replay_resume() to continue.
2019-06-18 04:10:29.998 EDT [24679] LOG:  database system is ready to accept read only connections

7.2

mytest=# select * from test;
 id | col |           ctime
----+-----+----------------------------
  1 | a   | 2019-06-18 03:57:12.767601
  2 | b   | 2019-06-18 03:57:12.772068
  3 | c   | 2019-06-18 03:57:13.572814
(3 rows)

7.3 继续推进

service postgresql_5432 stop

vim recovery.conf
restore_command = 'cp /home/postgres/pg_wal/%f %p'
recovery_target_time = '2019-06-18 03:57:17'

service postgresql_5432 start

mytest=# select * from test;
 id | col |           ctime
----+-----+----------------------------
  1 | a   | 2019-06-18 03:57:12.767601
  2 | b   | 2019-06-18 03:57:12.772068
  3 | c   | 2019-06-18 03:57:13.572814
  4 | a   | 2019-06-18 03:57:14.982699
  5 | b   | 2019-06-18 03:57:14.985398
  6 | c   | 2019-06-18 03:57:16.181587
(6 rows)

log

2019-06-18 04:13:27.951 EDT [25020] LOG:  database system was shut down in recovery at 2019-06-18 04:13:16 EDT
2019-06-18 04:13:27.952 EDT [25020] LOG:  starting point-in-time recovery to 2019-06-18 03:57:17-04
2019-06-18 04:13:27.997 EDT [25020] LOG:  restored log file "000000010000000000000002" from archive
2019-06-18 04:13:28.054 EDT [25020] LOG:  redo starts at 0/2000060
2019-06-18 04:13:28.103 EDT [25020] LOG:  restored log file "000000010000000000000003" from archive
2019-06-18 04:13:28.157 EDT [25020] LOG:  consistent recovery state reached at 0/3024DB0
2019-06-18 04:13:28.158 EDT [25020] LOG:  recovery stopping before commit of transaction 571, time 2019-06-18 03:57:20.958823-04
2019-06-18 04:13:28.158 EDT [25020] LOG:  recovery has paused
2019-06-18 04:13:28.158 EDT [25020] HINT:  Execute pg_wal_replay_resume() to continue.
2019-06-18 04:13:28.159 EDT [25018] LOG:  database system is ready to accept read only connections

 

8. 开启读写模式

如果我们确定恢复完成之后,可以打开读写模式了。只需要执行 pg_wal_replay_resume()

mytest=# create table test0618 (id int);
ERROR:  cannot execute CREATE TABLE in a read-only transaction

mytest=# select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 t
(1 row)
mytest=# select * from pg_wal_replay_resume();
 pg_wal_replay_resume
----------------------
(1 row)
mytest=# select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)
mytest=#  create table test0618 (id int);
CREATE TABLE

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值