postgresql 增量备份

介绍:

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

[[email protected] ~]# mkdir /var/lib/pgsql/.ssh
[[email protected] ~]# chown postgres /var/lib/pgsql/.ssh
[[email protected] ~]# 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 [email protected]
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 [email protected]
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.
[email protected]‘s password: 
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:
  .ssh/authorized_keys
to make sure we haven‘t added extra keys that you weren‘t expecting.
-bash-4.1$ ssh [email protected]

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

在backup上配置

[[email protected] ~]# 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 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|..o . .          |
|.... o .         |
| o  .   . +      |
|.   .    = +     |
|.  . .  S . .    |
| .  + .. . .     |
|.  E .o o .      |
| ..  . . .       |
|oo.              |
+-----------------+
-bash-4.1$ ssh-copy-id [email protected]
[email protected]‘s password: 
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:
  .ssh/authorized_keys
to make sure we haven‘t added extra keys that you weren‘t expecting.
-bash-4.1$ ssh [email protected]

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

配置pgserver中的postgresql:

[[email protected] ~]# vim /var/lib/pgsql/9.3/data/postgresql.conf

添加如下内容

wal_level = ‘archive‘ # For PostgreSQL >= 9.0
archive_mode = on
archive_command = ‘rsync -a %p [email protected]: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 [email protected]:/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的地址

验证配置:

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

[[email protected] ~]# 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上执行

开始备份:

[[email protected] ~]# 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

列出备份:

[[email protected] ~]# 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

删除备份:

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

恢复备份:

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

[[email protected] ~]# 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/

时间: 2024-10-10 18:40:49

postgresql 增量备份的相关文章

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

PostgreSQL 没有类似MySQL 的二进制日志, 但是有和MySQL 类似的REDO LOG,并且有MySQL 没有的REDO 归档功能.当然REDO 的归档已经MariaDB 和Percona-MySQL 已经实现. 那我们就利用PGSQL的REDO 归档,也叫WAL来实现增量备份. 假设我们已经做了一个物理的全备,并且相应的参数都已经设置完毕,比如以下: /home/full_backup 保存全备的目录.   /home/increment_log 保存增备的目录.       进

开源数据库Postgresql的备份和恢复

最近工作上使用的数据库一直是Postgresql,这是一款开源的数据库,而且任何个人可以将该数据库用于商业用途.在使用Postgresql的时候,让我最明显的感觉就是这数据库做的真心好,虽然说数据库的安装包真的很小,但是性能和操作的便捷是一点也不输给其他商业的大型数据库,另外在命令行界面下对该数据库直接进行操作的感觉真的是很爽.在使用数据库的时候,我们作为小公司的数据库管理员有一项工作是不可能避免的,那就是数据的备份和恢复问题.PostgreSQL虽然各个方面的有点很多,但是在数据库备份这方面,

使用mysqldump进行全量+增量备份方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入log-bin=/opt/Data/MySQL-bin"log-bin="后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘

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

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.场景:每周日执行一次完全备份,每天下午1点执行MySQLdump增量备份 MySQLdump增量备份配置 执行增量备份的前提条件是MySQL打开log-bin日志开关,例如在my.ini或my.cnf中加入 log-bin=/opt/Data/MySQL-bin “log-bin=”后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘上. My

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

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损坏的数据进行恢复和还原保证数据不丢失,最小程度地丢失需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 --备份与恢复概述 根据备份的方法可以分为: 1.Hot Backup(热备) 2.Cold Backup(冷备) 3.Warm Backup(温备) Hot Backup是指

postgresql恢复备份主从

参考 http://www.postgres.cn/docs/11/app-pg-dumpall.html http://m.blog.chinaunix.net/uid-20665047-id-5817656.html http://www.postgres.cn/docs/11/continuous-archiving.html#BACKUP-ARCHIVING-WAL https://blog.csdn.net/yaoqiancuo3276/article/details/80826073

MongoDB迁移方案-冷备份+增量备份恢复

QQ群:465614686 1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64Co

Percona Xtrabackup备份mysql (完整备份与增量备份)

Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM 的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流压缩到传输到其它服务器 4.能比较容易地创建主从同步 5.备份MySQL时不会增大服务器

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流