介绍:

barman是postgresql备份还原的管理工具。

本文环境:

系统: centos6.6

PostgreSQL 9.3.9

barman-1.4.1-1.rhel6.noarch.rpm

主机如下:

1
<span style="font-size: 12px;">192.168.33.30 pgserver<br>192.168.33.31 backup<br></span>

其中pgserver与backup安装相同版本的pg

postgresql的安装见:http://my.oschina.net/firxiao/blog/295027

安装与配置:

在pgserver上安装rsync

1
yum install rsync -y

在backup上安装并配置barman:

配置epel源:

1
curl firxiao.com/sh/chrepo.sh|bash

安装barman:

1
yum install -y http://nchc.dl.sourceforge.net/project/pgbarman/1.4.1/barman-1.4.1-1.rhel6.noarch.rpm

配置barman:

1
2
mv /etc/barman.conf /etc/barman.conf.bak
vim /etc/barman.conf

添加如下内容:

1
2
3
4
5
6
7
8
9
10
[barman]
barman_home = /var/lib/barman
barman_user = barman
log_file = /var/log/barman/barman.log
configuration_files_directory = /etc/barman.d
compression = gzip
reuse_backup = link
bandwidth_limit = 4000
basebackup_retry_times = 3
basebackup_retry_sleep = 30

创建配置文件目录

1
mkdir /etc/barman.d

创建名字为pgserver的备份配置

1
 vim /etc/barman.d/pgserver.conf

添加如下内容

1
2
3
4
5
6
[pgserver]
description =  "The pgserver PostgreSQL Database"
ssh_command = ssh postgres@pgserver
conninfo = host=pgserver user=postgres
minimum_redundancy = 1
retention_policy = RECOVERY WINDOW OF 4 WEEKS

各个参数的定义详见

1
man 5 barman

配置双机ssh信任登录

使用ssh-copy-id 需要用到pgserver上的postgre用户密码及backup上barman用户密码

使用passwd 给予即可

配置完毕后使用passwd -d 删除密码

在pgserver上配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@pgserver ~]# mkdir /var/lib/pgsql/.ssh
[root@pgserver ~]# chown postgres /var/lib/pgsql/.ssh
[root@pgserver ~]# su - postgres
 
-bash-4.1$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/pgsql/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/pgsql/.ssh/id_rsa.
Your public key has been saved in /var/lib/pgsql/.ssh/id_rsa.pub.
The key fingerprint is:
5b:bf:25:02:1c:36:e3:b9:98:42:5a:85:27:d4:03:92 postgres@pgserver
The key's randomart image is:
+--[ RSA 2048]----+
|  ..oo           |
|  Eo .o          |
|    o o.=        |
|     + + =       |
|    o   S .      |
|   +   o = .     |
|  . . o o . o .  |
|     .     . +   |
|            .    |
+-----------------+
-bash-4.1$ ssh-copy-id barman@backup
The authenticity of host 'backup (192.168.33.31)' can't be established.
RSA key fingerprint is f3:48:30:89:03:76:cb:04:19:7a:fe:8d:6c:90:e4:fe.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'backup,192.168.33.31' (RSA) to the list of known hosts.
barman@backup's password: 
Now try logging into the machine, with "ssh 'barman@backup'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
-bash-4.1$ ssh barman@backup

不输入密码即可登录backup表示配置成功

在backup上配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@backup ~]# su - barman
-bash-4.1$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/barman/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/barman/.ssh/id_rsa.
Your public key has been saved in /var/lib/barman/.ssh/id_rsa.pub.
The key fingerprint is:
59:f3:8a:23:56:b5:00:b2:40:e2:a9:fb:ea:95:1d:b8 barman@backup
The key's randomart image is:
+--[ RSA 2048]----+
|..o . .          |
|.... o .         |
| o  .   . +      |
|.   .    = +     |
|.  . .  S . .    |
| .  + .. . .     |
|.  E .o o .      |
| ..  . . .       |
|oo.              |
+-----------------+
-bash-4.1$ ssh-copy-id postgres@pgserver
postgres@pgserver's password: 
Now try logging into the machine, with "ssh 'postgres@pgserver'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
-bash-4.1$ ssh postgres@pgserver

不输入密码即可登录pgserver表示配置成功

配置pgserver中的postgresql:

1
[root@pgserver ~]# vim /var/lib/pgsql/9.3/data/postgresql.conf

添加如下内容

1
2
3
wal_level = 'archive' # For PostgreSQL >= 9.0
archive_mode = on
archive_command = 'rsync -a %p barman@backup:INCOMING_WALS_DIRECTORY/%f'

其中INCOMING_WALS_DIRECTORY 可以在backup服务器上使用

1
2
#barman show-server pgserver|grep "incoming_wals_directory"
incoming_wals_directory: /var/lib/barman/pgserver/incoming

查看 并更改为那个目录

所以替换后应该是:

1
2
3
wal_level = 'archive' # For PostgreSQL >= 9.0
archive_mode = on
archive_command = 'rsync -a %p barman@backup:/var/lib/barman/pgserver/incoming/%f'

接下来配置backup可以免密码登录

1
vim /var/lib/pgsql/9.3/data/pg_hba.conf

添加

1
host    all             postgres         192.168.33.31/32       trust

注意其中的IP地址为backup的地址

验证配置:

在backup上检查是否配置成功

1
2
3
4
5
#psql -c 'SELECT version()' -U postgres -h pgserver
                                                    version                                                    
---------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3.9 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11), 64-bit
(1 行记录)

验证barman配置

1
2
3
4
5
6
7
8
9
10
11
[root@backup ~]# barman check pgserver
Server pgserver:
ssh: OK
PostgreSQL: OK
archive_mode: OK
archive_command: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
minimum redundancy requirements: FAILED (have 0 backups, expected at least 1)

最后一行为检查最小保存备份数,因为还没有备份所以为0,其他的都为ok就可以了

基本使用:

以下操作均在backup上执行

开始备份:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@backup ~]# barman backup pgserver
Starting backup for server pgserver in /var/lib/barman/pgserver/base/20150914T151454
Backup start at xlog location: 0/6000028 (000000010000000000000006, 00000028)
Copying files.
Copy done.
Backup size: 32.1 MiB. Actual size on disk: 141.8 KiB (-99.57% deduplication ratio).
Asking PostgreSQL server to finalize the backup.
Backup end at xlog location: 0/60000B8 (000000010000000000000006, 000000B8)
Backup completed
Processing xlog segments for pgserver
000000010000000000000005
000000010000000000000006
000000010000000000000006.00000028.backup

列出备份:

1
2
3
4
5
[root@backup ~]# barman list-backup pgserver
pgserver 20150914T151454 - Mon Sep 14 15:14:55 2015 - Size: 32.1 MiB - WAL Size: 0 B
pgserver 20150914T143210 - Mon Sep 14 14:32:11 2015 - Size: 32.1 MiB - WAL Size: 32.1 KiB
pgserver 20150914T142931 - Mon Sep 14 14:29:41 2015 - Size: 32.1 MiB - WAL Size: 1.9 MiB
pgserver 20150914T142547 - FAILED

删除备份:

1
2
3
4
[root@backup ~]# barman delete pgserver 20150914T142547
Deleting backup 20150914T142547 for server pgserver
Delete associated WAL segments:
Done

恢复备份:

数据库误删除 丢失的时候 就需要恢复了

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@backup ~]# su - barman
-bash-4.1$ barman recover pgserver 20150914T142931 /tmp/pgserver_recover
Starting local restore for server pgserver using backup 20150914T142931 
Destination directory: /tmp/pgserver_recover
Copying the base backup.
Copying required wal segments.
Generating archive status files
Disabling dangerous settings in destination directory.
The archive_command was set to 'false' to prevent data losses.
Your PostgreSQL server has been successfully prepared for recovery!
Please review network and archive related settings in the PostgreSQL
configuration file before starting the just recovered instance.
Recovery completed successful.

这个操作会将数据库启动所需的文件复制到指定的目录然后使用命令启动即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-bash-4.1$  /usr/pgsql-9.3/bin/pg_ctl -D /tmp/pg_recover/ start
server starting
-bash-4.1$ < 2015-09-14 15:52:06.384 CST >LOG:  redirecting log output to logging collector process
< 2015-09-14 15:52:06.384 CST >HINT:  Future log output will appear in directory "pg_log".
-bash-4.1$ ps -ef|grep postgres
barman    4547     1  0 15:52 pts/0    00:00:00 /usr/pgsql-9.3/bin/postgres -D /tmp/pg_recover
barman    4548  4547  0 15:52 ?        00:00:00 postgres: logger process                      
barman    4550  4547  0 15:52 ?        00:00:00 postgres: checkpointer process                
barman    4551  4547  0 15:52 ?        00:00:00 postgres: writer process                      
barman    4552  4547  0 15:52 ?        00:00:00 postgres: wal writer process                  
barman    4553  4547  0 15:52 ?        00:00:00 postgres: autovacuum launcher process         
barman    4554  4547  0 15:52 ?        00:00:00 postgres: archiver process   failed on 000000010000000000000009
barman    4555  4547  0 15:52 ?        00:00:00 postgres: stats collector process             
barman    4560  4434  0 15:52 pts/0    00:00:00 grep postgres

从中找出你丢失的数据 然后恢复至pgserver中吧

到此已经完成了barman的基本配置及备份还原。

参考: http://docs.pgbarman.org/#installation

更多barman配置及使用详见官方文档: http://docs.pgbarman.org/

postgresql 增量备份的更多相关文章

  1. PostgreSQL 增量备份详解以及相关示例

    PostgreSQL 没有类似MySQL 的二进制日志, 但是有和MySQL 类似的REDO LOG,并且有MySQL 没有的REDO 归档功能.当然REDO 的归档已经MariaDB 和Percon ...

  2. mysql数据库的增量备份和全备

    还有一种简单的方法 参考 https://blog.csdn.net/u010098331/article/details/50932064 (注意:5.6版本以上新加了gtid 功能,gtid开启之 ...

  3. MySQLdump增量备份、完全备份与恢复

    在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.场景:每周日执行一次完全备份,每天下午1点执行MySQLdum ...

  4. 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份

    RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...

  5. MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

    粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损 ...

  6. mysql全量和增量备份详解(带脚本)

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

  7. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  8. mysql备份脚本,每天执行一次全量备份,三次增量备份

    线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at -- #scripte name : full_backup.sh #descriptioni : ...

  9. 通过innobackupex实现对MySQL的增量备份与还原

    备份 增量备份是基于完整备份的,所以我们需要先做一次完整备份: innobackupex --password=test /backup/ 备注:test是我的MySQL服务的root用户的密码,/b ...

随机推荐

  1. 【大数据技术能力提升_2】numpy学习

    numpy学习 标签(空格分隔): numpy python 数据类型 5种类型:布尔值(bool),整数(int),无符号整数(uint).浮点(float).复数(complex) 支持的原始类型 ...

  2. Struts框架笔记03_OGNL表达式与值栈

    目录 1. OGNL 1.1 OGNL概述 1.1 什么是OGNL 1.1.2 OGNL的优势 1.1.2 OGNL使用的要素 1.2 OGNL的Java环境入门[了解] 1.2.1 访问对象的方法 ...

  3. MySQL Index--关联条件列索引缺失导致执行计划性能不佳

    某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob ...

  4. 高效内存池的设计方案[c语言]

    一.前言概述 本人在转发的博文<内存池的设计和实现>中,详细阐述了系统默认内存分配函数malloc/free的缺点,以及进行内存池设计的原因,在此不再赘述.通过对Nginx内存池以及< ...

  5. 网络时间同步服务和chrony

    时间同步和chrony 时间同步:多主机协作工作时,各个主机时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用NTP(Network Time Protocol) ...

  6. spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射)

    1.系统环境 1.1 测试环境 centos6.4最小化安装(centos6.x桌面版也适用) 使用yum源为163源加EPEL源 1.2 spice客户端介绍 spice作为远程连接工具,可以支持远 ...

  7. 小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onUnloa)

    (1)onlaunch:当小程序初始化完成时,会触发 onLaunch(全局只触发一次)(app.js):(2)onLoad: 页面加载小程序注册完成后,加载页面,触发onLoad方法.一个页面只会调 ...

  8. 抖音热门BGM爬虫下载

    下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来 附上代码: #!/usr/bin/env python # -*- coding: utf- ...

  9. 使用笔记:TF辅助工具--tensorflow slim(TF-Slim)

    如果抛开Keras,TensorLayer,tfLearn,tensroflow 能否写出简介的代码? 可以!slim这个模块是在16年新推出的,其主要目的是来做所谓的“代码瘦身” 一.简介 slim ...

  10. RocketMQ部分消息消费不到的问题

    在企业项目中,利用RocketMQ接收数据,存库. 由于是第一次在项目中具体的使用RocketMQ,一直采坑. 1.发现问题:在最终的联调过程中,并发压测,订单数据丢失,同一时刻,oms推送900+的 ...