barman

article/2025/9/23 19:04:45

拓扑:

 

注意:

      1.barman的安装需要使用postgresql的模块,尽量保证pg1 ,barman-server,backup-pg上的postgresql版本一致。

       

 

步骤:

1 在pg1上安装postgresql-11
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install postgresql11
yum install postgresql11-server
/usr/pgsql-11/bin/postgresql-11-setup initdb

此时会生成一个postgres的系统用户,修改密码和用户主目录
vi /etc/passwd
将postgres用户的主目录改为/home/postgresql

vi pg_hba.conf
追加下面内容
host all all 192.168.10.118/32 trust
vi postgresql.conf
打开注释
listen_addresses = '*'

systemctl start postgresql-11


su - postgres
psql
postgres = # alter user postgres with password 'postgres';
postgres = \q

测试一下,此时用客户端连接一下数据库是否正常,可能需要开放防火墙端口,或者修改pg_hba.conf

2 同理,在backup-pg上安装postgresql-11

3 在barman服务器上安装Barman
首先需要安装以下存储库:
Enterprise Linux(EPEL)存储库的额外包
yum -y install epel-release

PostgreSQL全球开发组RPM存储库
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql11
运行此命令以安装Barman
yum -y install barman


4 建立ssh互联
需要确保:
4.1用户postgres可以从pg1远程连接到barman-server,以下为示范。
4.2用户barman可以从barman-server远程连接到pg1
4.3用户barman可以从barman-server远程连接到backup-pg

从pg1切换到用户postgres,如果它还不是当前用户:
sudo su - postgres
运行以下命令以生成SSH密钥对:
ssh-keygen -t rsa
生成密钥后,将在postgres用户的主目录下创建一个.ssh目录,其中包含密钥。
现在需要将SSH公钥复制到barman-server上barman用户的.ssh目录下的authorized_keys文件中。

运行以下命令输出postgres用户的公钥内容:
cat ~/.ssh/id_rsa.pub 复制输出的内容。

切换到连接到barman-server服务器的控制台并切换到用户barman:
sudo su - barman
运行以下命令以创建.ssh目录,设置其权限,将公钥内容复制到该authorized_keys文件,最后使该文件可读写:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
(测试一下:切换回pg1(postgres用户)下,测试连接:ssh barman@192.168.10.118)

同理,操作4.2,4.3并测试。
(免密登录可能会遇到的问题参考:https://my.oschina.net/ihsxin/blog/1531838)


5 配置Barman进行备份
切换到barman服务器
vi /etc/barman.conf
打开注释,修改参数
compression = gzip
immediate_checkpoint = true
basebackup_retry_times = 3
basebackup_retry_sleep = 30
last_backup_maximum_age = 1 DAYS
追加下面内容
[pg1]
description = "Main DB Server"
ssh_command = ssh postgres@192.168.10.26
conninfo = host=192.168.10.26 user=postgres
retention_policy_mode = auto
retention_policy = RECOVERY WINDOW OF 7 days
wal_retention_policy = main

6 修改pg1的postgresql.conf文件
(barman-server)sudo su - barman
运行此命令以找到传入的备份目录:
barman show-server pg1 | grep incoming_wals_directory
可能输出如下的值:
barman show-server command outputincoming_wals_directory: /var/lib/barman/main-db-server/incoming
记下值incoming_wals_directory; 在这个例子中,它是/var/lib/barman/main-db-server/incoming
现在切换到pg1控制台。
vi postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'rsync -a %p barman@192.168.10.118:/var/lib/barman/main-db-server/incoming/%f'
重启pg1的PostgreSQL:systemctl restart postgresql-11


7 测试barman
barman check pg1
应该输出类似:
barman check command outputServer main-db-server:
PostgreSQL: OK
archive_mode: OK
wal_level: OK
archive_command: OK
continuous archiving: OK
directories: OK
retention policy settings: OK
backup maximum age: FAILED (interval provided: 1 day, latest backup age: No available backups)
compression settings: OK
minimum redundancy requirements: OK (have 0 backups, expected at least 0)
ssh: OK (PostgreSQL server)
not in recovery: OK
(可以查看barman日志,定位问题)
barman list-server
应该输出类似:
pg1 - Main DB Server
第8步 - 创建第一个备份
barman backup main-db-server
应该输出类似:
Starting backup for server main-db-server in /var/lib/barman/main-db-server/base/20151111T051954
Backup start at xlog location: 0/2000028 (000000010000000000000002, 00000028)
Copying files.
Copy done.
Asking PostgreSQL server to finalize the backup.
Backup size: 26.9 MiB. Actual size on disk: 26.9 MiB (-0.00% deduplication ratio).
Backup end at xlog location: 0/20000B8 (000000010000000000000002, 000000B8)
Backup completed
Processing xlog segments for main-db-server
Older than first backup. Trashing file 000000010000000000000001 from server main-db-server
000000010000000000000002
000000010000000000000002.00000028.backup
ls -l /var/lib/barman 查看备份文件位置
barman list-backup pg1 列出备份
barman show-backup pg1 backup-id 将显示一组详细信息;backup-id为备份id
第9步 - 计划备份
在barman-server上以barman用户身份运行此命令
crontab -e
追加下面内容
30 23 * * * /usr/bin/barman backup main-db-server
* * * * * /usr/bin/barman cron
解释:
第一个命令将在每晚11:30 PM 运行pg1的完整备份。
第二个命令将每分钟运行一次,并对WAL文件和基本备份文件执行维护操作
第10步 - 模拟“灾难”
删除pg1上的表或者数据库
步骤11 - 恢复或迁移到远程服务器
首先,停止backup-pg的PostgreSQL服务
在barman-server下:
barman show-backup pg1 latest 获取backup-id 和Begin time
执行备份恢复:
barman recover --target-time "Begin time" --remote-ssh-command "ssh postgres@192.168.10.119" pg1 backup-id /var/lib/pgsql/11/data
可能输出如下的值:
Starting remote restore for server main-db-server using backup backup-id
Destination directory: /var/lib/pgsql/9.4/data
Doing PITR. Recovery target time: Begin time
Copying the base backup.
Copying required WAL segments.
Generating recovery.conf
Identify dangerous settings in destination directory.

IMPORTANT
These settings have been modified to prevent data losses

postgresql.conf line 207: archive_command = false

Your PostgreSQL server has been successfully prepared for recovery!
检查是否恢复:
在barman-server下:
systemctl start postgresql-11

--------------------------------------------------------------

streaming方式
1 在pg1上新增数据库超级用户streaming_barman,配置pg_hba.conf
host replication streaming_barman 192.168.10.118/32 trust
重启pg1的数据库
barman服务器上确认 streaming_barman 流复制是否正常
psql -h 192.168.10.26 -U streaming_barman -c "IDENTIFY_SYSTEM" replication=1
2 在pg1上设置postgresql.conf
max_wal_senders=2
max_replication_slots =2
重启pg1的数据库
3 barman服务器 修改配置barman.conf
[main-db-server]
description = "dn1 PostgreSQL Database (Streaming-Only)"
conninfo = host=192.168.10.26 user=barman dbname=postgres
streaming_conninfo = host=192.168.10.26 user=streaming_barman
backup_method = postgres
streaming_archiver = on
slot_name = barman
4 检查
barman show-server all
barman receive-wal --create-slot main-db-server
barman cron
barman check main-db-server
后续备份及还原过程和ssh方式一样,到上面第8步


http://chatgpt.dhexx.cn/article/0iSKF45G.shtml

相关文章

Barman备份方案介绍

Barman 是一款开源的基于Python开发的集备份和恢复为一体的优秀PG数据库备份工具,它可以对单个/多个PG数据库进行远程/本地备份,用以增强业务数据的安全性,为DBA提供恢复数据库提供可靠的帮助。 Barman 优点 支持对多版本PG的备份, 已知支持…

PostgreSQL 备份恢复工具之 Barman

文章目录 Barman 简介Barman 与 pg_dump 对比 Barman 简介 Barman(Backup and Recovery Manager,备份与恢复管理器)是一个用于 PostgreSQL 数据库灾难恢复的开源管理工具,使用 Python 编写。Barman 使得企业能够执行多个关键业务…

使用 barman的备份和归档PostgreSQL

1 前言 1.1 Barman简介 barman(备份和恢复管理器)是用于PostgreSQL服务器进行灾难恢复的开源管理工具,是以Python编写的。它支持对多台服务器执行远程备份,以降低风险并帮助DBA进行数据库恢复。 1.2 Barman的备份方式 本文假定…

github删除某个项目流程

1.进入网站 2.找到要删的项目,点进去 3.进去之后往下拉,拉到这里 接下来就点它按提示操作就删除了。

GitLab删除项目操作(亲测)

刚开始找了半天没找到删除按钮在哪,现在记录一下,分享。 第一步:点进入项目 第二步:进入项目Settings 第三步:往下拉,找到Remove,删除即可。 所有内容皆为个人总结或转载别人的文章,只为学习技…

删除gitlab上的分支

好久没有更新了, 今天记录一下删除gitlab上的分支的操作 登录仓库后, 依次点击: project --> home --> Readme --> repository --> branches 会看到所有master和所有分支, 点击右侧删除即可; 看到右边的红色垃圾桶了没, 删除按钮, 想要删除那个就点那个即可; 最近很…

GitLab如何删除已有项目

一。点击进入你需要删除的项目: 二。选择Settings,点击General,找到Advanced settings,点击Expand: 三。往下翻,找到Remove Project,点击: 四。根据提示,输入test&#x…

gitlab中如何删除Group,删除项目

删除自己创建的组: 一、首先查看自己的组,然后edit group,点击进入; 二、点击Settings中的General,然后点击Path, transfer, remove的Expend按钮; 3、滑到最下边,点击“Remove group”; 4、在弹出框中输入…

删除git、gitlab的分支

1.使用命令 删除本地分支 git branch -d dev 【git branch -参数 本地分支名称】删除远程分支 git push origin --delete dev 【git push origin --参数 远程分支名称】 2.在gitlab上删除分支 进入某个项目,例bootdo这个项目,bootdo->左右菜单Repos…

gitlab删除仓库文件夹

如图: 要删除router 首先进入项目master文件夹下, Git Bash Here ,打开命令窗口 $ git pull origin master # 将远程仓库里面的项目拉下来 $ dir # 查看有哪些文件夹 $ git rm -r --cached target # 删除target文件夹 $ git commit -m ‘删除了target’ # 提交…

gitlab 创建、修改、删除项目

一、创建用户组 1、setting --> Groups --> New group 2、填写用户组信息,点击 "Create group"。 3、选择需要加入改组的 用户和角色,点击 "Add users to group" 二、创建项目 1、点击 "New project" 2、填写项…

github上如何删除一个项目(仓库)

最近在学习使用git来管理项目,在学习管理远程库时,使用github来管理,创建的项目后来发现不需要这个项目了,想删除,找了好久都没找到在哪删除,在这里特意记录下来 首先创建一个Repositories 点击New reposi…

GitLab删除项目的操作步骤

1.进入项目首页 2.选择Settings-General 3.划至底部找到Advanced,点击右侧"Expand" 4.往下划可看到删除项目的按钮,点击后按操作提示即可

gitlab上删除项目

最近公司打算把不用svn而是git来托管代码. 然后我自己在公司的gitlab上建立了一个测试项目,这时候删除很容易直接在本页面上.一旦我上传了一些东西之后再删除就隐藏的比较深了.然后上网查的百度教程,发现不行.原因可能是git版本更新完之后,位置变了. 摸索了一通之后终于找到了…

如何删除gitlab上的文件夹

参考:如何删除gitlab上的文件夹 1.在本地新建一个文件夹,进入文件夹,右键git bash here。 2.在命令行窗口输入拉去gitlab仓库的命令,git clone "仓库地址",然后查看是否拉取成功。 3.在本地把需要删除的文件…

gitlab怎么删除项目

首先点击setting–general–advanced-expand展开 滑到最下面找到remove project 将要删除的项目名称输入到框里,删除

怎样删除Github中的项目

我们在GitHub上创建项目的时候,如果想要删除当前项目,怎样进行操作呢,下面就简单介绍一下怎样去删除GitHub中的项目 1、选择要删除的项目 2、进入项目中的setting(设置)中 3、一直下拉,看到有红色字体出现&…

如何在GitLab与GitHub中删除项目(仓库)

文章目录 一、GitLab中删除项目1、进入Projects找到要删除的项目2、选中左下角Settings中的General3、点击Advanced栏下的Expand4、然后滑到最下面的Remove project5、输入要删除项目的名字,确认删除 二、GitHub中删除仓库1、找到要删除的仓库,点击右上方…

删除Github中项目步骤

这里写自定义目录标题 删除Github中项目步骤1、选择要删除项目2、点击“Setting”3、一直拉到最后,选择“Delete this repository”4、位置①就是你的项目名称,直接复制到位置②,点击位置③,即完成删除Github项目。 删除Github中项…