PostgreSQL备份之pg_rman

一、 安装

PostgreSQL版本是9.4.4

# git clone -b REL9_4_STABLE https://github.com/ossc-db/pg_rman.git
Initialized empty Git repository in /opt/pg_rman/.git/
remote: Counting objects: 1939, done.
remote: Total 1939 (delta 0), reused 0 (delta 0), pack-reused 1939
Receiving objects: 100% (1939/1939), 702.67 KiB | 311 KiB/s, done.
Resolving deltas: 100% (1393/1393), done.
# yum install -y pam-devel readline-devel zlib-devel
# make
# make install
/bin/mkdir -p ‘/opt/pg94/bin‘
/usr/bin/install -c  pg_rman ‘/opt/pg94/bin‘
# pg_rman --version
pg_rman 1.3.1

二、使用

首先需要初始化备份目录

# mkdir -p /data/pg_backup
# mkdir -p /data/test_xlog_94/fulltime
# pg_rman  init --backup-path=/data/pg_backup/
WARNING: ARCLOG_PATH is not set yet
DETAIL: The archive_command is not set in postgresql.conf.
HINT: Please set ARCLOG_PATH in pg_rman.ini or environmental variable.
# vim /data/pg_backup/pg_rman.ini
ARCLOG_PATH=‘/data/test_xlog_94/fulltime‘

在master节点上制作一个全备,在从库上需要指定--host, --standby-host=172.17.5.47 --standby-port=5432

#  pg_rman backup --backup-mode=full --backup-path=/data/pg_backup/ --pgdata=/data/test_pgdata_94/ -U postgres -d postgres                                             
INFO: copying database files
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
INFO: copying archived WAL files
INFO: backup complete
HINT: Please execute ‘pg_rman validate‘ to verify the files are correctly copied.
# pg_rman show detail --backup-path=/data/pg_backup/
============================================================================================================
 StartTime           Mode  Duration    Data  ArcLog  SrvLog   Total  Compressed  CurTLI  ParentTLI  Status  
============================================================================================================
2015-09-07 02:52:22  FULL        0m   422MB   106kB    ----   394MB       false       1          0  OK

使用备份进行恢复

# mkdir restore_test
# pg_rman restore --backup-path=/data/pg_backup/ --pgdata=/data/restore_test/
WARNING: could not open pg_controldata file "/data/restore_test//global/pg_control": No such file or directory
WARNING: could not open pg_controldata file "/data/restore_test//global/pg_control": No such file or directory
INFO: backup "2015-09-07 02:52:22" is valid
INFO: the recovery target timeline ID is not given
INFO: use timeline ID of latest full backup as recovery target: 1
INFO: calculating timeline branches to be used to recovery target point
INFO: searching latest full backup which can be used as restore start point
INFO: found the full backup can be used as base in recovery: "2015-09-07 02:52:22"
INFO: copying online WAL files and server log files
INFO: clearing restore destination
INFO: validate: "2015-09-07 02:52:22" backup and archive log files by SIZE
INFO: backup "2015-09-07 02:52:22" is valid
INFO: restoring database files from the full mode backup "2015-09-07 02:52:22"
INFO: searching incremental backup to be restored
INFO: searching backup which contained archived WAL files to be restored
INFO: backup "2015-09-07 02:52:22" is valid
INFO: restoring WAL files from backup "2015-09-07 02:52:22"
INFO: restoring online WAL files and server log files
INFO: generating recovery.conf
INFO: restore complete
HINT: Recovery will start automatically when the PostgreSQL server is started.

由于是用root用户进行备份和恢复的,目录权限也是root,需要修改为postgres

# ls -ld /data/restore_test/
drwxr-xr-x. 18 root root 4096 Sep  7 03:00 restore_test/
# cat /data/restore_test/recovery.conf 
# recovery.conf generated by pg_rman 1.3.1
restore_command = ‘cp /data/test_pgdata_94/pg_xlog/%f %p‘
recovery_target_timeline = ‘1‘
# chown -R postgres:postgres /data/restore_test/
# chmod 0700 /data/restore_test/
# ls -ld /data/restore_test/
drwx------. 18 postgres postgres 4096 Sep  7 03:05 /data/restore_test/

将端口修改为5433,并启动恢复的数据库

$ pg_ctl -D /data/restore_test/ start
server starting
[[email protected] data]$ [    2015-09-07 07:05:40.291 UTC 31889 55ed3744.7c91 1 0]LOG:  redirecting log output to logging collector process
[    2015-09-07 07:05:40.291 UTC 31889 55ed3744.7c91 2 0]HINT:  Future log output will appear in directory "pg_log".
$ psql -p 5433
psql (9.4.4)
Type "help" for help.

恢复到指定时间点的话,执行restore的时候使用如下参数:

  --recovery-target-time    time stamp up to which recovery will proceed
  --recovery-target-xid     transaction ID up to which recovery will proceed
  --recovery-target-inclusive whether we stop just after the recovery target
  --recovery-target-timeline  recovering into a particular timeline

会将相应的参数写到recovery.conf里面

参考:http://ossc-db.github.io/pg_rman/index.html

时间: 2024-10-23 19:57:05

PostgreSQL备份之pg_rman的相关文章

postgresql 备份

PostgreSQL备份与恢复示例 文档控制 l       文档变更记录 日期 版本号 作者 备注 2009-8-13 v1.0 陈浩 创建 TOC \o "1-3" \h \z \u PostgreSQL备份与恢复 文档控制 一.       简介 二.       SQL转储 (一)pg_dump (二)pg_dumpall; (三)备份压缩与分割 三.       文件系统级别备份(冷备份) 四.       在线热备份(归档) (一)备份 (二)恢复 一.      简介 P

postgresql备份恢复数据库和批量导入导出数据到文件方法

备份数据库:pg_dump -h localhost -U root demo02 > /home/arno/dumps/demo02.bak 恢复数据库:psql -h localhost -U root -d demo <  demo.bak 备份表:pg_dump -h localhost -U root demo02 -t books > /home/arno/dumps/books.bak 恢复表:psql -h localhost -U root -d demo -t boo

PostgreSQL备份之手工备份(Low Level API)

一.备份 1. 需要保证archive_mode = on 和 archive_command是有效的 2. 在master节点上连接上数据库并执行 SELECT pg_start_backup('label', true); pg_start_backup第二个参数设置为true的好处是备份开始会执行一个检查点,设置为true能尽快的完成检查点,并且能减少备份期间产生的wal文件,但是会对查询有影响,默认设置的checkpoint_completion_target的一半的时间,半夜的备份建议

PostgreSQL备份之pg_basebackup

一.准备 连接上master节点创建replication用户 # CREATE ROLE replicator with login replication password 123456: 修改白名单pg_hba.conf # host    replication    all        xxxxx/32    md5 二.制作基础备份 # pg_basebackup --format=tar \ #使用打包方式备份 --xlog-method=fetch \    #获取wal文件方

postgresql 备份 还原

windows  linux 通用 第一步:通过 cmd 进入到postgresql 安装目录的 bin 下: cd C:\PostgreSQL\pg95\bin 第二步:备份数据库 pg_dump -h localhost -U TPlusPosAdmin -d tegen -f "C:\testdatabase.bak" -h:数据库服务器地址: -p:数据库端口号: -U:U 大写,表示用户名: -d:数据库名称:-f:把备份文件放在哪里: 第三步:还原数据库(你要还原的数据库软

postgreSQL备份数据

1.pg_dump 备份单一数据库 pg_dump仅导出数据库结构:pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1 备份某个database,备份结果以自定义压缩格式输出:pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb 备份某个database,备份结果以SQL文本方式输出,输出结果中需包括CREATE DATABASE语句:pg_dump -h loca

postgreSQL 备份多张表

-U表示用户 -h表示主机 -p表示端口号 -t表示表名 -f表示备份后的sql文件的名字 -d表示要恢复数据库名 一.打开cmd 进入postgresql安装路径下的bin文件夹,以我的为例: cd D:\Program Files\PostgreSQL\bin 二.输入备份命令,多个表每个表前面都要加 -t: 输入口令,即你的数据库登录密码,完成备份. pg_dump -U postgres -h localhost -p 5432 -t fsrd_user -t fsrd_tenant -

PostgreSQL备份之omniPITR

一.准备 1. 安装 omnipitr是用perl写的,直接下载下来就可以用了 # git clone https://github.com/omniti-labs/omnipitr.git /opt/omnipitr/ Initialized empty Git repository in /opt/omnipitr/.git/ remote: Counting objects: 2627, done. remote: Total 2627 (delta 0), reused 0 (delta

postgreSQL备份脚本删除3天前备份同时压缩昨天备份

脚本功能: 系统环境:SUSE Linux Server 11.3 X64 1.删除3天前压缩文件(.bak.tar.gz) 2.备份数据库(未压缩文件.bak) 3.压缩昨天数据库备份文件(.bak.tar.gz),删除昨天数据库备份未压缩文件(.bak) #!/bin/bash export PATH=$PATH:/usr/local/pgsql/bin DATE=`date +%Y_%m_%d_%H` YESDAY=`date -d "yesterday" +%Y_%m_%d_%