合 PG备份恢复工具之Barman
Tags: PGPostgreSQL备份恢复整理自网络Barman
- 简介
- 主要功能
- 备份方式
- 基于流协议的备份
- 基于rsync/ SSH 的备份
- 安装与配置
- rpm安装(推荐)
- 源码安装
- Barman备份恢复实验
- 本机备份还原示例
- 异地备份恢复示例
- 一些错误
- WAL archive: FAILED (please make sure WAL shipping is setup)
- replication slot: FAILED (slot ‘pgsql_streaming’ not initialised: is ‘receive-wal’ running?)
- unexpected termination of replication stream: ERROR: requested starting point
- error: could not send replication command
- archive_mode: FAILED (please set it to ‘on’ or ‘always’)
- ERROR: ArchiverFailure:replication slot 'barman' is already in use
- ssh: FAILED (Connection failed using 'ssh pg15@192.92.0.42 -o BatchMode=yes -o StrictHostKeyChecking=no' return code 255)
- FATAL: password authentication failed for user "postgres"
- 总结
- 参考
简介
GitHub:https://github.com/EnterpriseDB/barman
文档:http://www.pgbarman.org/documentation/
下载:https://pgbarman.org/downloads/
Barman(Backup and Recovery Manager)是一款用于PostgreSQL数据库的开源备份和恢复管理工具,由Python编写,EnterpriseDB进行维护。
Barman支持对本地或远程的PostgreSQL服务器进行物理备份,并提供了强大的功能来协助数据库管理员进行数据恢复。
barman备份主要分为三类:
1.仅流复制;
2.ssh/rsync;
3.流复制+ssh/rsync
其它web资源:
- Website : http://www.pgbarman.org/
- Download : http://github.com/EnterpriseDB/barman
- Documentation : http://www.pgbarman.org/documentation/
- Man page, section 1 : http://docs.pgbarman.org/barman.1.html
- Man page, section 5 : http://docs.pgbarman.org/barman.5.html
- Community support : http://www.pgbarman.org/support/
- Professional support : https://www.enterprisedb.com/
- pre barman 2.13 versions : https://sourceforge.net/projects/pgbarman/files/
PG备份比较:https://wiki.postgresql.org/wiki/Binary_Replication_Tools
主要功能
- 文件级别增量备份:支持全量和增量备份,以节省存储空间和减少备份时间。
- WAL归档:管理写前日志(WAL)归档,以确保数据一致性和恢复能力。
- 自动恢复:支持自动恢复到指定的时间点或事务。
- 远程备份:可以对远程PostgreSQL服务器进行备份。
- 监控和报警:提供备份状态监控和报警功能。
- 自动备份:可以配置定时任务自动执行备份。
- 数据完整性检查:验证备份的完整性保证数据可靠性。
- 点对点恢复(PITR):支持恢复到数据库的任意时间点,增强灾难恢复能力。
- 并行备份:可以并行执行备份多个服务器,提高效率。
备份方式
参考:https://docs.pgbarman.org/release/3.10.1/ Two typical scenarios for backups
基于流协议的备份
基于流协议的备份方法是barman 提供的独特的方法。它适用于PostgreSQL 9.4或更高版本。它使用pg_basebackup进行基础备份,使用pg_receivewal ( PostgreSQL 10 以下是 pg_receivexlog)归档WAL。其结构如下图所示:
在这种情况下,您将需要配置:
- 与PostgreSQL的标准连接,用于管理,协调和监视
- 供pg_basebackup(用于基本备份操作)和pg_receivewal(用于WAL流归档)使用的流复制连接
用Barman 的术语来说,此设置称为 streaming-only设置,因为它不需要任何SSH连接即可进行备份和归档操作。
Barman 也支持基于基于流协议的备份与基于SSH 的WAL 归档结合,下图描绘了这种实现:
这种方案要求:
- 额外的SSH连接,以允许用户postgres 在PostgreSQL服务器以barman的用户身份连接到Barman服务器上。
- 在PostgreSQL的配置文件postgresql.conf 中配置archive_command,内容是将WAL文件归档到Barman的归档目录。具体格式可参考官方手册。
基于rsync/ SSH 的备份
基于rsync/ SSH 的备份是一种传统的基于文件的备份方式。它一般适用于下面的情形。
- PostgreSQL服务器版本是8.3、8.4、9.0或9.1
- 使用表空间的PostgreSQL服务器版本是9.2或9.3
- 增量备份,并行备份和重复数据删除
- 备份期间的网络压缩
- 更好地控制带宽使用,包括在表空间的基础上
它的体系结构如下图所示:
在这种情况下,您将需要配置:
- 与PostgreSQL的标准连接,用于管理,协调和监视
- 用于基础备份操作的SSH连接,rsync会使用它,以允许barman用户在Barman服务器上以用户postgres的身份连接到PostgreSQL服务器
- 用于WAL归档的SSH连接,archive_command会使用它,以允许用户postgres 在PostgreSQL服务器以用户barman的身份连接到Barman服务器。
从PostgreSQL 9.2开始,您可以添加用于WAL流式传输的流复制连接。下图描绘了这种实现:
安装与配置
rpm安装(推荐)
https://pgbarman.org/downloads/
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 36 | -- 需要EPEL源,若安装报错,可以考虑删除pgdg-redhat-all.repo源 rm -rf /etc/yum.repos.d/pgdg-redhat-all.repo yum install -y barman #使用上面命令安装barman的时候会自动安装下面的模块 python36-argcomplete.x86_64 python36-argh python36-psycopg2 python36-dateutil #使用 pip 安装需要的 python 模块。进入 python3 的安装目录,执行命令如下 pip3 install argcomplete -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip3 install argh -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip3 install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip3 install python-dateutil -i https://pypi.tuna.tsinghua.edu.cn/simple/ #如果安装第三个模块报错Error: pg_config executable not found. 使用下面这条命令后再次尝试安装 yum install postgresql-devel* #如果上面这条命令又报错 Error Summary 将提示的冲突软件包的低版本卸载掉 yum remove *** python -m pip install -U pip pip3 install psycopg2-binary -i https://pypi.tuna.tsinghua.edu.cn/simple/ [root@lhrpg02 yum.repos.d]# barman -v 3.10.0 Barman by EnterpriseDB (www.enterprisedb.com) [root@lhrpg01 ~]# id barman uid=993(barman) gid=988(barman) groups=988(barman) [root@lhrpg01 ~]# [root@lhrpg01 ~]# [root@lhrpg01 ~]# [root@lhrpg01 ~]# cat /etc/barman/barman.conf | grep -v ';' | grep -v '^$' [barman] barman_user = barman configuration_files_directory = /etc/barman/conf.d barman_home = /var/lib/barman log_file = /var/log/barman/barman.log log_level = INFO [root@lhrpg01 ~]# |
日志:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | [root@lhrpg01 yum.repos.d]# yum install -y barman Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package barman.noarch 0:3.10.0-1.el7 will be installed --> Processing Dependency: python3.6dist(argcomplete) for package: barman-3.10.0-1.el7.noarch --> Processing Dependency: python3.6dist(barman) for package: barman-3.10.0-1.el7.noarch --> Processing Dependency: python3.6dist(psycopg2) for package: barman-3.10.0-1.el7.noarch --> Processing Dependency: python3.6dist(python-dateutil) for package: barman-3.10.0-1.el7.noarch --> Running transaction check ---> Package python3-barman.noarch 0:3.10.0-1.el7 will be installed ---> Package python3-psycopg2.x86_64 0:2.7.7-2.el7 will be installed ---> Package python36-argcomplete.noarch 0:1.7.0-5.el7 will be installed ---> Package python36-dateutil.noarch 1:2.4.2-6.el7 will be installed --> Processing Dependency: python36-six for package: 1:python36-dateutil-2.4.2-6.el7.noarch --> Running transaction check ---> Package python36-six.noarch 0:1.14.0-3.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== Installing: barman noarch 3.10.0-1.el7 epel 31 k Installing for dependencies: python3-barman noarch 3.10.0-1.el7 epel 548 k python3-psycopg2 x86_64 2.7.7-2.el7 epel 157 k python36-argcomplete noarch 1.7.0-5.el7 epel 47 k python36-dateutil noarch 1:2.4.2-6.el7 epel 84 k python36-six noarch 1.14.0-3.el7 epel 34 k Transaction Summary ======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== Install 1 Package (+5 Dependent packages) Total size: 901 k Total download size: 157 k Installed size: 4.6 M Downloading packages: python3-psycopg2-2.7.7-2.el7.x86_64.rpm | 157 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : python36-argcomplete-1.7.0-5.el7.noarch 1/6 Installing : python36-six-1.14.0-3.el7.noarch 2/6 Installing : 1:python36-dateutil-2.4.2-6.el7.noarch 3/6 Installing : python3-barman-3.10.0-1.el7.noarch 4/6 Installing : python3-psycopg2-2.7.7-2.el7.x86_64 5/6 Installing : barman-3.10.0-1.el7.noarch 6/6 Verifying : python3-psycopg2-2.7.7-2.el7.x86_64 1/6 Verifying : barman-3.10.0-1.el7.noarch 2/6 Verifying : 1:python36-dateutil-2.4.2-6.el7.noarch 3/6 Verifying : python3-barman-3.10.0-1.el7.noarch 4/6 Verifying : python36-six-1.14.0-3.el7.noarch 5/6 Verifying : python36-argcomplete-1.7.0-5.el7.noarch 6/6 Installed: barman.noarch 0:3.10.0-1.el7 Dependency Installed: python3-barman.noarch 0:3.10.0-1.el7 python3-psycopg2.x86_64 0:2.7.7-2.el7 python36-argcomplete.noarch 0:1.7.0-5.el7 python36-dateutil.noarch 1:2.4.2-6.el7 python36-six.noarch 0:1.14.0-3.el7 Complete! |
源码安装
https://github.com/EnterpriseDB/barman/releases
1 2 3 4 5 | wget https://github.com/EnterpriseDB/barman/releases/download/release%2F3.10.1/barman-3.10.1.tar.gz tar -zxvf barman-3.10.1.tar.gz ./setup.py build ./setup.py install |
Barman备份恢复实验
lhrpg01(192.92.0.23)为备份服务器,lhrpg02(192.92.0.42)为数据库服务器。
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrpgall:4.0 docker rm -f lhrpg01 docker run -itd --name lhrpg01 -h lhrpg01 \ -p 25432-25445:5432-5445 -p 122:22 -p 189:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --restart=always \ --privileged=true lhrbest/lhrpgall:4.0 \ /usr/sbin/init docker exec -it lhrpg01 bash ps -ef|grep postgres | grep bin docker rm -f lhrpg02 docker run -itd --name lhrpg02 -h lhrpg02 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --restart=always \ --privileged=true lhrbest/lhrpgall:4.0 \ /usr/sbin/init docker exec -it lhrpg02 bash systemctl stop pg94 pg96 pg10 pg11 pg12 pg13 pg14 pg15 systemctl stop postgresql-15.service yum install -y barman echo "barman:lhr" | chpasswd -- 互信 ./sshUserSetup.sh -user root -hosts "192.92.0.23 192.92.0.42" -advanced -noPromptPassphrase -confirm ./sshUserSetup.sh -user barman -hosts "192.92.0.23 192.92.0.42" -advanced -noPromptPassphrase -confirm ./sshUserSetup.sh -user pg16 -hosts "192.92.0.23 192.92.0.42" -advanced -noPromptPassphrase -confirm sh sshUserSetup2.sh "root barman pg16 pg15 pg14 pg13" "192.92.0.42 192.92.0.23" mkdir /bk chmod 777 /bk # 分别对pg01和pg02 设置数据库参数 alter system set archive_command = 'test ! -f /pg16/archive/%f && cp %p /pg16/archive/%f'; -- alter system set archive_command = 'rsync -a %p barman@192.92.0.23:/bk/pg03/wals/%f'; alter system set archive_mode = on; alter system set listen_addresses = '*'; -- alter system set log_line_prefix = ''; alter system set max_wal_senders = 10; alter system set wal_level = replica; # 重启数据库 pg_ctl restart cp /etc/barman/barman.conf /etc/barman/barman.conf_bk cat > /etc/barman/barman.conf <<"EOF" [barman] barman_user = barman configuration_files_directory = /etc/barman/conf.d barman_home = /bk log_file = /var/log/barman/barman.log log_level = INFO parallel_jobs = 2 compression = gzip immediate_checkpoint = true retention_policy = RECOVERY WINDOW OF 4 WEEKS [pg01] description = "local pg 16" conninfo = host=127.0.0.1 user=postgres dbname=postgres port=5441 streaming_conninfo = host=127.0.0.1 user=postgres port=5441 backup_method = postgres streaming_archiver = on slot_name = barman create_slot = auto streaming_archiver_name = barman_receive_wal streaming_archiver_batch_size = 50 path_prefix = "/pg16/pg16/bin" [pg02] description = "remote pg 16 (via Ssh)" ssh_command = ssh pg16@192.92.0.42 conninfo = host=192.92.0.42 user=postgres dbname=postgres port=5441 password=lhr streaming_conninfo = host=192.92.0.42 user=postgres port=5441 password=lhr backup_method = postgres parallel_jobs = 2 streaming_archiver = on slot_name = barman create_slot = auto streaming_archiver_name = barman_receive_wal streaming_archiver_batch_size = 50 path_prefix = "/pg16/pg16/bin" [pg03] description = "remote pg 15 (via Ssh)" ssh_command = ssh pg15@192.92.0.42 conninfo = host=192.92.0.42 user=postgres dbname=postgres port=5440 password=lhr streaming_conninfo = host=192.92.0.42 user=postgres port=5440 password=lhr backup_method = postgres parallel_jobs = 2 streaming_archiver = on slot_name = barman create_slot = auto streaming_archiver_name = barman_receive_wal streaming_archiver_batch_size = 50 path_prefix = "/pg15/pg15/bin" EOF # 查看目标机器 barman list-servers barman list-servers --minimal |
barman_user 运行barman 的用户
configuration_files_directory 配置文件所在目录。 将您的备份放在扩展名为.conf的单独文件中
barman_home barman的主目录,即为备份存放路径
log_file barman 日志文件的位置
log_level 日志级别
retention_policy 备份的保留策略。空表示禁用;REDUNDANCY 2 表示保留两份基础备份;RECOVERY WINDOW OF 4 WEEKS 表示保留4星期之内的备份。
parallel_jobs 通过rsync备份和恢复的并行作业数
immediate_checkpoint 备份命令是否执行立即检查点
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!