postgres物理备份与恢复

操作系统:centos 6.5 64

数据库:postgres 9.5.1

1冷备份与恢复

文件系统级别的备份是冷备份,需要停止数据库。

1.1操作步骤

(1)停止数据库

pg_ctl -D /pgdb/data  stop -m   fast

(2)备份数据库

tar  -jcvf /pgdb/backup/filebackup.tar.bz2  /pgdb/data

(3)删除/pgdb/data目录

rm –r /pgdb/data

(4)解压备份文件到原目录

tar -jxvf /pgdb/backup/filebackup.tar.bz2–C /

(5)启动数据库

pg_ctl -D /pgdb/data start

2热备份

PITR原理

postgres在数据目录中pg_xlog中始终维护着一个wal日志。这个日志文件用于记录数据库数据文件的所有改变。当数据库出现故障时,能够通过某个时间点的全备份+重做归档日志文件(可以指定重做时间点)把数据库恢复到全备份之后的任意时间点位置。

2.1基础-日志归档

配置归档需要编辑postgresql.conf文件,默认位置在../data/目录下

(1)固定目录

vim  /pgdb/data/postgresql.conf

archive_mode= on

archive_command= 'cp %p /pgdb/backup/archived_log/%f'

wal_level= archive

注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名

(2)禁用

archive_mode= on

archive_command= '/bin/date'   #(change requires restart)

备注:这种归档的禁用或启用需要通过修改postgresql.conf文件来控制,并且修改之后还需要reload 操作,步骤较烦琐。

(3)使用逻辑或运算

archive_mode= on

archive_command= 'test ! -f /pgdb/backup/archived_log || cp %p /pgdb/backup/archived_log/%f '

备注:这里使用了逻辑或运算,当文件标识/pgdb/backup/archived_log存在时,则会运行之后的归档命令。

(4)shell判断语句

archive_mode= on

archive_command= 'if [ -f "/pgdb/backup/archived_log " ]; then cp %p /pgdb/backup/archived_log/%f; fi'

(5)archive_command中控制每天生成一个归档目录(生成环境建议)

archive_command= 'DIR=/pgdb/backup/archived_log/`date +%F`; test ! -d $DIR && mkdir -p $DIR; test ! -f $DIR/%f && cp %p$DIR/%f'

写脚本直接每天备份前一天归档目录(如果是当天,管理不便)

脚本 vi /pgdb/backup_archlog.sh

#!/bin/bash

echo " `date +"%Y-%m-%d %H:%M:%S"` start backuped to `date -d "-1 day" +%F` archlog" > /pgdb/backup1/archived_log/`date -d "-1 day" +%F`.log 2>&1

cp -r /pgdb/backup/archived_log/`date -d "-1 day" +%F`   /pgdb/backup1/archived_log/

echo " `date +"%Y-%m-%d %H:%M:%S"` end  backuped to `date -d "-1 day" +%F` archlog" >> /pgdb/backup1/archived_log/`date -d "-1 day" +%F`.log 2>&1

chown  -R  postgres  /pgdb/backup_archlog.sh—赋予权限

chmod  +x /pgdb/backup_archlog.sh –可执行

crontab  -e添加内容,保存即可

2.2利用pg_start_backup 与pg_stop_backup()手工进行

步骤:

----备份

(1)创建数据库test:create database test;

(2)创建表并插入记录:

test=# create table testtb(a int) ;

test=# insert into testtb(a) values(1);

(3)使数据库处与备份状态(类似于oracle的begin backup)

test=# select pg_start_backup('baseline');

(4)操作系统tar命令备份整个data目录
tar  -jcvf   /pgdb/backup/baseline.tar.bz2  /pgdb/data

(5)停止备份
test =# select pg_stop_backup();

(6)插入新记录,然后切换日志3次

test=# insert into testtb (a) values(2);

test=# select pg_switch_xlog();

test=# insert into testtb (a) values(3);

test=# select pg_switch_xlog();

test=# insert into testtb (a) values(4);

test=# delete from testtb;

test=# insert into tb(a) values(5);

test=# select pg_switch_xlog();

(7)把/data/pg_xlog/下的WAL日志文件也复制到预设的归档目录下,保证产生的WAL日志都已归档(如果没有保存,在线日志文件损坏,那么数据会部分丢失)。

-----全库恢复到最新时间点

(1)停止数据库

pg_ctl–D /pgdb/data/   stop(或者直接kill数据库进程)

(2)删除/data

rm  -r   /pgdb/data

(3)恢复备份

tar -jxvf  /pgdb/backup/baseline.tar.bz2  –C /

(4)清空/data/pg_xlog/目录下所有文件

rm  -r  /pgdb/data/pg_xlog/

(5)创建/sr_xlog/及其下面的archive_status目录
mkdir  /pgdb/data/pg_xlog/

mkdir  /pgdb/data/pg_xlog/archive_status

(6)在/data/目录下创建recovery.conf

vim/pgdb/data/recovery.conf

restore_command='cp  /pgdb/backup/archived_log/%f %p'

--recovery-target-xid    //恢复到那个事务

--recovery_target_time    //恢复到一个时间点

(7)启动数据库
pg_ctl –D /pgdb/data/   start

数据库就会自动应用WAL日志进行恢复

(8)查看数据库test是否恢复

2.3利用pg_basebackup

封装了pg_start_backup 与pg_stop_backup()

命令:./pgdb_basebackup    -D  /pgdb/backup   -Ft  -z-P

(1)该工具使用replication协议连接到数据库实例,所以主库pg_hba.conf必须允许replication连接;

(2)数据库运行状态执行pg_basebackup  -D /pgdb/backup  -Ft  -z  -P

(3)异机恢复:拷贝备份文件改名data以及拷贝归档,配置recovery.conf文件,启动即可(需要归档文档)。

语法:

pg_basebackup [option]

-D directory 或--srdata=directory       备份路径

-F format或--format=format                输出格式p与tar

-R, --write-recovery-conf                    生成recovery.conf文件

-T, --tablespace-mapping=OLDDIR=NEWDIR    表空间重隐射

-x 或 --xlog  备份过程中产生的xlog文件也备份出来,使用该参数,需要设置wal_keep_segments以保证备份过程中,需要的wal日志不会被覆盖。

-X, --xlog-method=fetch|stream  s表示备份开始后,启动另一个流复制连接从主库接收wal日志,这个方式避免了使用(-X f)时,主库上的wal日志有可能被覆盖而导致失败的问题,但这种方式需要与主库建2个连接,因此主库上max_wal_senders值大于等于3

-z, --gzip                                仅能与tar输出配合使用

-Z, --compress=0-9                压缩级别
-c, --checkpoint=fast|spread   设置checkpoint模式

-l, --label=LABEL      备份标识
-P, --progress           显示备份进度

-v, --verbose             详细模式

-V, --version             版本信息

-?, --help                 显示帮助

Connection options:

-h, --host=HOSTNAME             主机

-p, --port=PORT                       数据库端口

-s, --status-interval=INTERVAL指定向服务器端周期反馈状态的时间(如果服务器上配置了流复制的超时,在使用—xlog=s选项时,则需设置这个参数,默认10s,0表示不反馈)

-U, --username=NAME            用户名
-w, --no-password                   密码
-W, --password                       强制密码输入

使用示例

1本地使用做备份

pg_basebackup  -D   /backup   -Ft  –z  -P

之后可以拷贝到备库机做恢复

2远程备库机直接基础克隆

pg_basebackup  -h xxxx  -p 5432  -U  dba  -F p  -P  -x -R -D  /pgdb/data

2.4物理备份恢复之工具pg_rman

[postgres@pg2 bin]$pg_rman --help

Usage:

pg_rman OPTION init                      初始化

pg_rman OPTION backup                备份

pg_rman OPTION restore                 还原

pg_rman OPTION show [DATE]        查看

pg_rman OPTION show detail [DATE]   检查明细

pg_rman OPTION validate [DATE]         校验

pg_rman OPTION delete DATE              删除(delete删除备份文件)

pg_rman OPTION purge                        删除(purge删除备份目录中的备份信息)

Common Options:

-D, --pgdata=PATH            数据库存储路径

-A, --arclog-path=PATH      WAL存储路径

-S, --srvlog-path=PATH      server log存储路径

-B, --backup-path=PATH    备份存储路径

-c, --check                        显示将要做什么

-v, --verbose                      显示详细信息

-P, --progress                   show progress of processed files

Backup options:

-b, --backup-mode=MODE   备份模式选择full,incremental,or archive

-s, --with-serverlog              同时备份server log文件

-Z, --compress-data            使用zlib压缩数据文件备份

-C, --smooth-checkpoint     备份之前进行checkpoint

-F, --full-backup-on-error  如果pg_rman在当前时间线没有发现有效的全备,则进行全备,这个选项只用于--backup-mode=incremental or archive.

--keep-data-generations=NUM keep NUM数量的全备

--keep-data-days=NUM           keep相关的备份使其可以恢复到NUM天前

--keep-arclog-files=NUM          keep NUM数量的WAL归档日志

--keep-arclog-days=DAY         keep 归档 WAL日志DAY天

--keep-srvlog-files=NUM          keep NUM数量的serverlogs

--keep-srvlog-days=DAY         keep serverlog DAY天

--standby-host=HOSTNAME   从standby备份时主机

--standby-port=PORT             从standby备份时端口

Restore options:

--recovery-target-time        还原到某个时间

--recovery-target-xid          还原到某个xid

--recovery-target-inclusive  是否恢复到恢复目标之后

--recovery-target-timeline   恢复到特殊的时间线

--hard-copy                     copying archivelog not symbolic link

Catalog options:

-a, --show-all               显示全部(包括已删除备份)

Delete options:

-f, --force                    强制删除

Connection options:

-d, --dbname=DBNAME         数据库名

-h, --host=HOSTNAME          主机名

-p, --port=PORT                     端口

-U, --username=USERNAME  用户名

-w, --no-password                   不提示密码

-W, --password                       提示密码

Generic options:

-q, --quiet                 不显示任何INFO或者 DEBUG信息

--debug                    显示 DEBUG 信息

--help                      显示帮助,然后退出

--version                  显示版本,然后退出

(1)首先要配置数据库归档(静态参数,需重启)

(2)创建数据库备份文件夹:mkdir   /pgdb/backup/pg_rman

(3)初始化rman备份路径及参数:pg_rman init -B /pgdb/backup/pg_rman

(4)查看帮助:pg_rman  --help

exportBACKUP_PATH=/pgdb/backup/pg_rman

exportARCLOG_PATH= /pgdb/backup/archived_log/`date +%F`

(5)备份:pg_rman backup   -b  full(incremental,archive)

pg_rmanbackup -A /pgdb/backup/archived_log/`date +%F`  -b  full -Z

//显示历史备份:pg_rmanshow

//验证:pg_rman validate

//详细显示某个备份:pg_rmanshow   '2015-11-02 22:01:04'

//删除备份:pg_rmandelete  -f  2015-11-02 22:01:04

6各种rman命令: init;backup;restore;show [DATE];show timeline [DATE];validate[DATE];delete DATE

7恢复:pg_rman  restore --recovery-target-time"2015-07-19 23:04:01"

首先把时间点备份还原到指定路径,然后自动生成recovery.conf文件,并应用日志。

8启动数据库即可

注意:一般备份时提示需要输入密码

如果做脚本做自动任务备份会受影响

解决:在环境变量中

直接写密码:export  PGPASSWORD=密码;

用密码文件:export PGPASSFILE=/文件路径/.pgpass

9示例:增量备份与恢复

备份与增量备份:

pg_rman backup   -b  full

pg_rman validate

pg_rman show

==========================================================

StartTime           Mode  Duration    Size   TLI  Status

==========================================================

2015-11-02 21:57:01  FULL        0m   258MB     4  OK

之后新建表:create   table   test1(id  int,name varchar(10));

pg_rman backup -b incremental   -U  dba

pg_rman validate

pg_rman show

==========================================================

StartTime           Mode  Duration    Size   TLI  Status

==========================================================

2015-11-02 22:00:31  INCR        0m   136MB     4  OK

2015-11-02 21:57:01  FULL        0m   258MB     4  OK

之后新建表:create   table   test2(id  int,name varchar(10));

pg_rman backup -b incremental   -U  dba

pg_rman validate

pg_rman show

==========================================================

StartTime           Mode  Duration    Size   TLI  Status

==========================================================

2015-11-02 22:01:04  INCR        0m   136MB     4  OK

2015-11-02 22:00:31  INCR        0m   136MB     4  OK

2015-11-02 21:57:01  FULL        0m   258MB     4  OK

--增量恢复

drop  table   test2;现在需求要恢复test2

pg_rman show   '2015-11-02 22:01:04'

# configuration

BACKUP_MODE=INCREMENTAL

FULL_BACKUP_ON_ERROR=false

WITH_SERVERLOG=false

COMPRESS_DATA=false

# result

TIMELINEID=4

START_LSN=0/68000028

STOP_LSN=0/680000b8

START_TIME='2015-11-02 22:01:04'

END_TIME='2015-11-02 22:01:10'

RECOVERY_XID=1956    //可以用作恢复时XID

RECOVERY_TIME='2015-11-02 22:01:08'

TOTAL_DATA_BYTES=134238904

READ_DATA_BYTES=2466014

READ_ARCLOG_BYTES=134218047

WRITE_BYTES=136647353

BLOCK_SIZE=32768

XLOG_BLOCK_SIZE=65536

STATUS=OK

1停止数据库

2 pg_rman  restore  --recovery-target-xid  1956

恢复过程之中,数据库自动选择利用增量备份进行恢复

3启动数据库即可

小结完成。

postgres物理备份与恢复相关推荐

  1. oracle物理备份与恢复,Oracle 备份与恢复概念原理学习

    梳理下oracle中备份与恢复的概念原理--[@more@] 一.备份与恢复分逻辑和物理备份与恢复. 二.逻辑类:命令有EXP和IMP. 三.物理类:Noarchivelog和archivelog模式 ...

  2. Mysql 使用企业级MEB进行数据库物理备份与恢复

    在免费下载并使用的MySQL开源社区版本中,默认并不包含MEB(MySQL Enterprise Backup,MySQL企业版备份工具)物理热备工具,因为它是一款Oracle自研的企业级软件,用户需 ...

  3. 《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》

    一.Percona XtraBackup工具介绍 Percona XtraBackup是世界上唯一开源.免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份.Percona ...

  4. postgres 物理格式

    2019独角兽企业重金招聘Python工程师标准>>> Introduction to PostgreSQL physical storage November 9, 2015 I ...

  5. ch5 MySQL 备份与恢复

    第 5 章 MySQL 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 My ...

  6. MySQL性能调优与架构设计——第5章 备份与恢复

    第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...

  7. mysql数据备份与恢复_MySQL数据备份与恢复

    常见的MySQL管工具 mysql 命令行 跨平台 MySQL官方bundle包自带 MySQL-Workbench 图形 跨平台 MySQL官方提供 MySQL-Front 图形 Windows 开 ...

  8. MySQL日志管理、备份与恢复

    MySQL日志管理.备份与恢复 前言 一.MySQL日志管理 (1)日志分类 ①错误日志 ②通用查询日志 ③二进制日志 ④慢查询日志 ⑤中继日志 (2)日志配置 (3)日志查询 ①查询通用日志是否开启 ...

  9. 【mysql】mysql数据备份与恢复

    数据的重要性不言而喻,所以做好数据的备份工作显得尤其必要,不知不觉我又开始扯犊子了.... 一.逻辑备份与恢复 数据库逻辑备份就是备份软件按照最初设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据库 ...

最新文章

  1. 斯坦福马腾宇:用显式正则器提升深度神经网络的泛化能力
  2. Spring Ioc源码分析 之 Bean的加载(6):属性填充(populateBean())
  3. 计算机创建快捷方式w10,win10无法创建快捷方式,win10发送快捷方式磁盘满了
  4. C# GDI+ 实现图片分隔
  5. STM32/M3/M0关于开关总中断的问题
  6. linux运维需要掌握的基础知识
  7. 打造网红内容和资本哪个更重要
  8. 【翻译】MobileWeb开发的性能调优技巧
  9. 程序员的需要掌握的数学知识
  10. Oracle数据库的数据类型
  11. html都是纯文本文件吗,关于“什么是纯文本文件”的思考
  12. itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL
  13. 使用matlab进行简单图像处理
  14. 实验十OSPF路由聚合
  15. 国际冠码与国际电话区号
  16. android开发_ViewGroup(组视图)-- 五大布局
  17. python中的pip命令在cmd下用不了?
  18. Arcgis Server 发布服务报错Failed to start the server machine ‘XXX‘. Error while starting AppServer. Requir
  19. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock
  20. 互联网时代的“跨界打击”有多厉害?最怕大势将至,你却浑然不知

热门文章

  1. typeof与keyof
  2. tmail邮箱服务器,邮件服务器(一)Sendmail服务器1
  3. 商业分析能力是怎样炼成的?
  4. 【供应链架构day9】美团配送系统架构的演进之路:从MVP到规模化
  5. 网关地址对于计算机的重要性
  6. 修复版站长导航源码系统
  7. 如何不使用快压解压快压超高压缩比压缩的文件?
  8. Tableau 中国教育水平发展指标历史数据(一)教育公共开支总额和GDP
  9. 11.13Z周报-HRNet
  10. 生化危机2重制版 小笔记