文档章节

postgresql 增量备份

Firxiao
 Firxiao
发布于 2015/09/14 16:32
字数 1592
阅读 1294
收藏 7

介绍:

barman是postgresql备份还原的管理工具。官网: http://www.pgbarman.org/

本文环境:

系统: centos6.6

PostgreSQL 9.3.9

barman-1.4.1-1.rhel6.noarch.rpm

主机如下:

192.168.33.30 pgserver
192.168.33.31 backup

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

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

安装与配置:

在pgserver上安装rsync:

yum install rsync -y

在backup上安装并配置barman:

 配置epel源:

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

安装barman:

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

   

配置barman:

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


添加如下内容:

[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

 创建配置文件目录

mkdir /etc/barman.d

 创建名字为pgserver的备份配置

 vim /etc/barman.d/pgserver.conf


添加如下内容

[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

 

各个参数的定义详见

man 5 barman


配置双机ssh信任登录:

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

使用passwd 给予即可

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

  在pgserver上配置

[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上配置

[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:

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

添加如下内容

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服务器上使用

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

查看 并更改为那个目录

所以替换后应该是:

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

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

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

添加

host    all             postgres         192.168.33.31/32       trust

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

配置完成后重启数据库

 /etc/init.d/postgresql-9.3 restart


验证配置:

在backup上检查是否配置成功

#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配置

[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上执行  

  开始备份:

[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

  列出备份:

[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

  删除备份:

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


  恢复备份:

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

[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.

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

-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中吧

  停掉数据库:

-bash-4.1$  /usr/pgsql-9.3/bin/pg_ctl -D /tmp/pg_recover/ stop
waiting for server to shut down....... done
server stopped

  

  定时备份:

 利用cron实现定时备份

#crontab -e

  添加如下信息即可:

*/5 * * * * /usr/bin/barman backup pgserver >/dev/null 2>&1

 (5分钟备份一次)


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


参考:

安装及配置:  http://docs.pgbarman.org/#installation 

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

postgresql: http://www.postgresql.org/docs/9.3/static/continuous-archiving.html 


© 著作权归作者所有

共有 人打赏支持
Firxiao
粉丝 22
博文 99
码字总数 36560
作品 0
浦东
运维
私信 提问
加载中

评论(7)

Jeffrey00
Jeffrey00
真是谢谢了~我要好好看看手册了~
Firxiao
Firxiao

引用来自“Jeffrey00”的评论

谢谢啊,我按照你的这个文档安装成功了,也都备份成功了,只是有些地方 我不太理解
1、barman backup pgserver这个命令每次运行都全备份,还是什么~
2、incoming_wals_directory: /var/lib/barman/pgserver/ incoming这个目录是存储什么用的~我的这个目录里面 为空
3,而/var/lib/barman/pgserver/ wals 中有
4、您说的 增量(rsync)备份 什么意思
实在抱歉,完全新手,如果有时间的话,望给予帮助~
1. 全备
2.3 日志相关的配置
4.参考http://docs.pgbarman.org/release/2.3/#scenario-2-backup-via-rsyncssh
官方文档多看几遍哦,没有捷径
Jeffrey00
Jeffrey00
谢谢啊,我按照你的这个文档安装成功了,也都备份成功了,只是有些地方 我不太理解
1、barman backup pgserver这个命令每次运行都全备份,还是什么~
2、incoming_wals_directory: /var/lib/barman/pgserver/ incoming这个目录是存储什么用的~我的这个目录里面 为空
3,而/var/lib/barman/pgserver/ wals 中有
4、您说的 增量(rsync)备份 什么意思
实在抱歉,完全新手,如果有时间的话,望给予帮助~
Firxiao
Firxiao
在第一次备份的时候会把远端的数据库备份(pg_basebackup)到本地,然后之后备份会根据日志(archive_command)来增量(rsync)备份,具体的可以看官方文档. 另外本文版本可能有点老。最好参考官方文档来.
http://docs.pgbarman.org/release/2.3/#standard-archiving-wal-streaming-or-both
Jeffrey00
Jeffrey00
还有:archive_command = 'rsync -a %p barman@backup :INCOMING_WALS_DIRECTORY/%f' 这个配置是什么意思~
WAL 和pg_log之间什么关系~
Jeffrey00
Jeffrey00
实在不懂,希望 帮助
Jeffrey00
Jeffrey00
大神,你好,请问 这个pg_xlog的文件备份在哪里~什么时候实现的增量备份的啊,
恢复备份的时候是恢复到哪里?是barman的服务器吗? 另外那个pg_xlog中的文件在哪呢~
物理备份和在线备份工具pg_rman使用详解(九)

pg_rman工具是实现PostgreSQL数据库在线备份,物理备份和恢复的备份工具。可以实现全量备份,增量备份。 全量: full 增量: incremental 归档: archive 开始使用pg_rman工具: chown -R postgre...

鸿鹄安然
2018/10/15
0
0
PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库

标签 PostgreSQL , 恢复部分数据库 , 跳过坏块 , 修复无法启动的数据库 , 时间点恢复 , 逻辑备份 , 连续备份 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB)。 如果访问有...

德哥
2018/04/18
0
0
Barman 1.4.0 发布,PostgreSQL 备份和恢复管理器

Barman 1.4.0 发布,此版本最主要的功能是文件级别增量备份功能,每次完整备份数据重复数据删除率很容易就能达到 50-70%,显著降低了备份时间和磁盘空间。 PostgreSQL 9.4 可以集成 Barman 的...

oschina
2015/01/27
1K
4
数据库案例集锦 - 开发者的《如来神掌》

标签 PostgreSQL , PG DBA cookbook , PG Oracle兼容性 , PG 架构师 cookbook , PG 开发者 cookbook , PG 应用案例 背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗...

德哥
2017/06/09
0
0
从代码层判断 pg_basebackup 是否已正常结束 - 暨改进建议

标签 PostgreSQL , pg_basebackup 背景 用户通常会使用pg_basebackup来对PostgreSQL实施在线备份,对于超级大的数据库实例,可能需要备份很久。 如果将任务分解来看,假设备份是任务流中的一...

德哥
2018/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《大话数据结构》读后总结(四)

一、算法 1、算法效率的度量方法 1.1 事后统计方法 通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。该方法具有很大缺陷,不...

徐曙辉
44分钟前
2
0
Android 整体设计及背后意义

阿里妹导读:现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有...

阿里云云栖社区
46分钟前
2
0
一文纵览EMAS 到底内含多少阿里核心技术能力

EMAS的整体定位是阿里巴巴移动技术对外输出的主窗口,沉淀了阿里巴巴近10年在移动互联网技术架构上的积累以及在一系列垂直场景中所实践的核心技术能力。一方面,EMAS希望为广大开发者提供安全...

阿里云官方博客
今天
2
0
Prometheus简介

Prometheus是什么? Prometheus(普罗米修斯)是一套最初在SoundCloud上构建的开源监视和告警系统 。 特征 普罗米修斯的主要特点是: 具有由度量名称和键/值对标识的时间序列数据的多维数据模...

阿dai学长
今天
2
0
Android 动画Animation

动画分为视图动画(view animation)和属性动画(property animation),视图动画又分为帧动画和补间动画 视图动画控件(iv)点击事件(OnClickListener接口)触发位置在原位置 1.帧动画(Fra...

Coding缘
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部