PostgreSQL PITR实验
磨砺技术珠矶,践行数据之道,追求卓越价值
回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页
看PostgreSQL中与PITR相关的设定:
wal_level=archive
…
# - Archiving -
archive_mode = on # allows archiving to be done
# (change requires restart)
archive_command = 'cp %p "/usr/local/pgsql/arch/%f"' # command to use to archive a logfile segment
#archive_timeout = 0 # force a logfile segment switch after this
# number of seconds; 0 disables
开始,在运行之前,看xlog状况:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total
-rw------- postgres postgres Aug :
drwx------ postgres postgres Aug : archive_status
-rw------- postgres postgres Aug :
[postgres@pg201 pgsql]$ [postgres@pg201 pgsql]$ ls -lrt ./arch
total
-rw------- postgres postgres Aug :
[postgres@pg201 pgsql]$
为文件拷贝进行准备:
[postgres@pg201 pgsql]$ ./bin/psql
psql (9.1.2)
Type "help" for help. postgres=# select pg_start_backup('gao');
pg_start_backup
-----------------
0/3000020
(1 row) postgres=#
此时,xlog和archive log状况如下:
[postgres@pg201 pgsql]$
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49216
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
drwx------ 2 postgres postgres 4096 Aug 6 14:17 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000003 [postgres@pg201 pgsql]$ ls -lrt ./arch
total 32808
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
[postgres@pg201 pgsql]$
完成文件拷贝:
[postgres@pg201 pgsql]$ tar -cvf basedata.tar ./data
结束基础备份:
postgres=# select pg_stop_backup();
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup
----------------
0/30000A0
(1 row) postgres=#
再次查看log:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49220
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
drwx------ 2 postgres postgres 4096 Aug 6 14:20 archive_status
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
[postgres@pg201 pgsql]$ [postgres@pg201 pgsql]$ ls -lrt ./arch
total 49216
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
[postgres@pg201 pgsql]$
可以看到产生了一个backup文件,看内容:
[postgres@pg201 pgsql]$ cat ./data/pg_xlog/000000010000000000000003.00000020.backup
START WAL LOCATION: 0/3000020 (file 000000010000000000000003)
STOP WAL LOCATION: 0/30000A0 (file 000000010000000000000003)
CHECKPOINT LOCATION: 0/3000020
BACKUP METHOD: pg_start_backup
START TIME: 2013-08-06 14:17:53 CST
LABEL: gao
STOP TIME: 2013-08-06 14:20:53 CST
[postgres@pg201 pgsql]$
强制日志切换,模拟大量数据产生导致日志switch:
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/4000000
(1 row) postgres=#
log发生了变化:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49220
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000006
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
drwx------ 2 postgres postgres 4096 Aug 6 14:27 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 14:27 000000010000000000000005
[postgres@pg201 pgsql]$
[postgres@pg201 pgsql]$ ls -lrt ./arch
total 65620
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
[postgres@pg201 pgsql]$
再作几次log switch,最后是这样:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49220
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000006
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
drwx------ 2 postgres postgres 4096 Aug 6 14:27 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 14:27 000000010000000000000005
[postgres@pg201 pgsql]$
[postgres@pg201 pgsql]$ ls -lrt ./arch
total 65620
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
[postgres@pg201 pgsql]$
经过一次正常关机后,日志再次变化:
[postgres@pg201 pgsql]$ ./bin/pg_ctl -D ./data stop
日志变为:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49220
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000007
drwx------ 2 postgres postgres 4096 Aug 6 14:39 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 14:39 000000010000000000000006
-rw------- 1 postgres postgres 16777216 Aug 6 14:39 000000010000000000000005
[postgres@pg201 pgsql]$
[postgres@pg201 pgsql]$ ls -lrt ./arch
total 82024
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:39 000000010000000000000005
[postgres@pg201 pgsql]$
重新启动PostgreSQL,添加数据,然后杀掉进程,模拟崩溃:
[postgres@pg201 pgsql]$ ./bin/psql
psql (9.1.2)
Type "help" for help. postgres=# create table test(id integer);
CREATE TABLE
postgres=# insert into test values(1);
INSERT 0 1
postgres=# \q
[postgres@pg201 pgsql]$
[root@pg201 ~]# ps -ef | grep post
root 3120 3049 0 14:08 pts/1 00:00:00 su - postgres
postgres 3121 3120 0 14:08 pts/1 00:00:00 -bash
root 3216 3191 0 14:15 pts/2 00:00:00 su - postgres
postgres 3217 3216 0 14:15 pts/2 00:00:00 -bash
root 3299 3279 0 14:17 pts/3 00:00:00 su - postgres
postgres 3300 3299 0 14:17 pts/3 00:00:00 -bash
postgres 3516 1 0 15:00 pts/2 00:00:00 /usr/local/pgsql/bin/postgres -D ./data
postgres 3518 3516 0 15:00 ? 00:00:00 postgres: writer process
postgres 3519 3516 0 15:00 ? 00:00:00 postgres: wal writer process
postgres 3520 3516 0 15:00 ? 00:00:00 postgres: autovacuum launcher process
postgres 3521 3516 0 15:00 ? 00:00:00 postgres: archiver process
postgres 3522 3516 0 15:00 ? 00:00:00 postgres: stats collector process
root 3559 3535 0 15:01 pts/4 00:00:00 grep post
[root@pg201 ~]# kill -s SIGQUIT 3516
[root@pg201 ~]#
下面开始回复动作、找出基础备份:
[postgres@pg201 pgsql]$ tar -xvf basedata.tar ./data
其pg_xlog目录下,还是旧的online redo log:
[postgres@pg201 pg_xlog]$ ls -lrt
total 49216
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
drwx------ 2 postgres postgres 4096 Aug 6 14:17 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000003
[postgres@pg201 pg_xlog]$
把它清空后,不补足online redolog,仅仅用 archive log的效果:
在解压好的data目录下,建立 recovery.conf文件:
[postgres@pg201 data]$ cat recovery.conf
restore_command = 'cp /usr/local/pgsql/arch/%f %p'
[postgres@pg201 data]$
启动PostgreSQL:
[postgres@pg201 pgsql]$ ./bin/pg_ctl -D ./data status
pg_ctl: no server running
[postgres@pg201 pgsql]$ ./bin/pg_ctl -D ./data start
pg_ctl: another server might be running; trying to start server anyway
server starting
[postgres@pg201 pgsql]$ LOG: database system was interrupted; last known up at 2013-08-06 14:17:53 CST
LOG: creating missing WAL directory "pg_xlog/archive_status"
LOG: starting archive recovery
LOG: restored log file "000000010000000000000003" from archive
LOG: redo starts at 0/3000078
LOG: consistent recovery state reached at 0/4000000
LOG: restored log file "000000010000000000000004" from archive
LOG: restored log file "000000010000000000000005" from archive
cp: cannot stat `/usr/local/pgsql/arch/000000010000000000000006': No Such File or Directory
LOG: could not open file "pg_xlog/000000010000000000000006" (log file 0, segment 6): No Such File or Directory
LOG: redo done at 0/5000078 LOG: restored log file "000000010000000000000005" from archive cp: cannot stat `/usr/local/pgsql/arch/00000002.history': No Such File or Directory
LOG: selected new timeline ID: cp: cannot stat `/usr/local/pgsql/arch/00000001.history':No Such File or Directory
LOG: archive recovery complete
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
因为我的创建table test 的动作虽然计入了 redo log中,但是由于突然的崩溃,没有来得及放入archive 日志中,所以,没有得到恢复:
[postgres@pg201 pgsql]$ ./bin/psql
psql (9.1.2)
Type "help" for help. postgres=# select * from test;
ERROR: relation "test" does not exist
LINE 1: select * from test;
^
postgres=#
此时,看Log,就可以清晰地看到TimeLine的痕迹了:
[postgres@pg201 pgsql]$ ls -lrt ./data/pg_xlog
total 49220
-rw------- 1 postgres postgres 56 Aug 6 15:11 00000002.history
-rw------- 1 postgres postgres 16777216 Aug 6 15:11 00000000000000000000005
-rw------- 1 postgres postgres 16777216 Aug 6 15:17 00000000000000000000006
drwx------ 2 postgres postgres 4096 Aug 6 15:17 archive_status
-rw------- 1 postgres postgres 16777216 Aug 6 15:17 00000000000000000000007
[postgres@pg201 pgsql]$
[postgres@pg201 pgsql]$ ls -lrt ./arch
total 114836
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 267 Aug 6 14:20 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 14:20 000000010000000000000003
-rw------- 1 postgres postgres 16777216 Aug 6 14:25 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:39 000000010000000000000005
-rw------- 1 postgres postgres 56 Aug 6 15:11 0000000.history
-rw------- 1 postgres postgres 16777216 Aug 6 15:17 00000000000000000000006
-rw------- 1 postgres postgres 16777216 Aug 6 15:17 00000000000000000000005
[postgres@pg201 pgsql]$ cat ./arch/00000002.history
1 000000010000000000000005 no recovery target specified
[postgres@pg201 pgsql]$
这次再看清空pg_xlog目录后,补足online redolog+archive log的效果:
还要把 pg_xlog/archive_status 目录清空:
[postgres@pg201 pgsql]$ cp ./data.bak/pg_xlog/* ./data/pg_xlog/
... [postgres@pg201 pg_xlog]$ ls -lrt
total 98432
-rw------- 1 postgres postgres 16777216 Aug 6 14:16 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000002
-rw------- 1 postgres postgres 16777216 Aug 6 14:17 000000010000000000000003
-rw------- 1 postgres postgres 267 Aug 6 15:41 000000010000000000000003.00000020.backup
-rw------- 1 postgres postgres 16777216 Aug 6 15:41 000000010000000000000007
-rw------- 1 postgres postgres 16777216 Aug 6 15:41 000000010000000000000006
-rw------- 1 postgres postgres 16777216 Aug 6 15:41 000000010000000000000005
drwx------ 2 postgres postgres 4096 Aug 6 15:44 archive_status
[postgres@pg201 pg_xlog]$
此时,启动 PostgreSQL:
[postgres@pg201 pgsql]$ ./bin/pg_ctl -D ./data start
pg_ctl: another server might be running; trying to start server anyway
server starting
[postgres@pg201 pgsql]$ LOG: database system was interrupted; last known up at 2013-08-06 14:17:53 CST
LOG: starting archive recovery
LOG: restored log file "000000010000000000000003" from archive
LOG: redo starts at 0/3000078
LOG: consistent recovery state reached at 0/4000000
LOG: restored log file "000000010000000000000004" from archive
LOG: restored log file "000000010000000000000005" from archive
cp: cannot stat `/usr/local/pgsql/arch/000000010000000000000006': No such file or directory
LOG: record with zero length at 0/6011770
LOG: redo done at 0/6011730
LOG: last completed transaction was at log time 2013-08-06 15:01:17.757945+08
LOG: restored log file "00000002.history" from archive
cp: cannot stat `/usr/local/pgsql/arch/00000003.history': No such file or directory
LOG: selected new timeline ID: 3
cp: cannot stat `/usr/local/pgsql/arch/00000001.history': No such file or directory
LOG: archive recovery complete
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
看数据:
[postgres@pg201 pgsql]$ ./bin/psql
psql (9.1.2)
Type "help" for help. postgres=# select * from test;
id
----
1
(1 row) postgres=#
回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页
磨砺技术珠矶,践行数据之道,追求卓越价值
PostgreSQL PITR实验的更多相关文章
- PostgreSQL基础知识与基本操作索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ...
- PostgreSQL的PITR中,对 unfilled wal log 如何处理为好
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 通过实验,可以发现,PostgreSQL中使 ...
- PostgreSQL LIKE 查询效率提升实验<转>
一.未做索引的查询效率 作为对比,先对未索引的查询做测试 EXPLAIN ANALYZE select * from gallery_map where author = '曹志耘'; QUERY P ...
- PostgreSQL数据库表名的大小写实验
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@g ...
- postgresql基于备份点PITR恢复
实验目的: 01.基于备份点直接恢复数据库 02.基于备份点后续增量wal日志恢复到特定的时间点 实验环境: centos7 postgresql9.5 01.安装postgresql9.5 post ...
- PostgreSQL的 PITR实战---运用 recovery_target_time
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 看了很多的例子,没有发现具体讲 recove ...
- PostgreSQL的xlog实验一
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 一,从initdb开始,initdb执行结束 ...
- PostgreSQL设置事务隔离级别实验
apple=# begin; BEGIN apple=# set transaction ISOLATION LEVEL read committed ; SET apple=# select * f ...
- 对PostgreSQL数据库的hstore类型建立GisT索引的实验
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@g ...
随机推荐
- Asp.net mvc Kendo UI Grid的使用(二)
上一篇文章对Kendo UI做了一些简单的介绍以及基本环境,这篇文章来介绍一下Grid的使用 先上效果图: 要实现这个效果在Controller在要先导入Kendo.Mvc.UI,Kendo.Mvc. ...
- 使用 Azure 门户创建 Linux 虚拟机
可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...
- 转载:eclipse 搭建SSH项目(第二篇,有具体的项目例子)
原文地址:http://blog.csdn.net/yeohcooller/article/details/9316923 读博文前应该注意: 本文提纲:本文通过一个用户注册的实例讲解SSH的整合.创 ...
- 如何在ScrollView滑动的瞬间禁用拖拽手势
如何在ScrollView滑动的瞬间禁用拖拽手势 效果: 在UIScrollView滑动的瞬间禁用pan手势,可以防止用户按着屏幕不放后导致出现的一些莫须有的bug. // // ViewContro ...
- 编写带有点击特效的UIButton
编写带有点击特效的UIButton 效果: 源码: // // ViewController.m // Button // // Created by XianMingYou on 15/1/18. ...
- Collection集合 总结笔记
2:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) ...
- 一、BOM 二、DOM
一.BOM(window对象)###<1>window属性对象 window.location 当前浏览器的地址对象 window.history 浏览器访问过的地址对象 window.o ...
- 禁用loop back check
在sharepoint 2013 服务器上,如果修改了AAM (alternate access mappings), 在服务器上访问本地的sharepoint就会一直弹出登陆窗口,无法访问. 于是必 ...
- postGresql关键字字段重名
在postGresql中如果关键字和自定义的字段重名 即使使用[ ](中括号)或者 ' '(单引号)都没有用,经本人实验. 如果使用" "(双引号),则可以.
- 前端面试总结——http、html和浏览器篇
1.http和https https的SSL加密是在传输层实现的. (1)http和https的基本概念 http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和 ...