介绍:

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​​ 

安装与配置:



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/​​