pgsql备份工具:pg_rman在Linux下的安装、设置与使用

本文详细介绍了如何在Ubuntu系统中安装和配置pg_rman,一个用于PostgreSQL的在线备份和恢复工具。首先,设置了pgsql的配置文件以启用wal文件归档,然后下载并安装pg_rman,解决编译时的依赖问题。接着,初始化pg_rman并设置备份目录,最后进行了全量和增量备份的测试,验证了pg_rman的功能。
摘要由CSDN通过智能技术生成

pg_rman是PostgreSQL的在线备份和恢复工具。

pg_rman项目的目标是提供一种像pg_dump一样简单的在线备份和PITR方法。

它就是pgsql实现全量备份和增量备份的最简易的工具。

github地址:https://github.com/ossc-db/pg_rman

操作思想:

因为pgsql是建议使用postgres用户对pgsql进行使用,所以尽量避免使用root用户去操作数据库。所以pg_rman安装在root用户下之后,我们要切换到postgres用户下去使用它。那么pgsql和pg_rman的相关文件夹要赋予权限给postgres用户。

1.环境准备

1.1 postgres的设置

设置pgsql的配置文件,使得:archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

这个参数设置的是用来表示wal文件归档命令,会被pg_rman使用。命令中的“/mnt/server/archivedir”目录可以配置到任意自己想要的目录。

a.先寻找配置文件位置
root@VM-20-13-ubuntu: locate postgresql.conf

结果如下图,红框就是它的位置:

b.使用vim进行配置文件编辑
root@VM-20-13-ubuntu: vim /etc/postgresql/10/main/postgresql.conf
c.使用“/”进行搜索archive_command
/archive_command

结果如下图:

d.配置archive_command的值。这里可以自己把文件cp的路径改成自己喜欢的路径。
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
e.继续设置文档中的值wal_level和archive_mode

设置:

wal_level = replica
archive_mode = on
d.去建立该wal文件存储路径,并赋予权限

这一步非常重要,如果没有赋予wal文件存储路径给postgres权限的话,在postgres用户下的pgsql根本没有权限去写wal文件进入该文件夹。

root@VM-20-13-ubuntu: mkdir -p /mnt/server/archivedir
root@VM-20-13-ubuntu: chown postgres:postgres -R /mnt/server/archivedir
root@VM-20-13-ubuntu: su postgres -c "chmod 700 -R /mnt/server/archivedir"
e.重启pgsql
root@VM-20-13-ubuntu: service postgresql restart 

2.下载pg_rman

2.1查看pgsql的版本:

root@VM-20-13-ubuntu: su postgres
postgres@VM-20-13-ubuntu:/$ psql --version

结果如下图,我用的是psql 10 的版本:

2.2 去github上获取pg_rman的对应版本

a.打开网站:https://github.com/ossc-db/pg_rman

b.点击这里:

c.我使用的是10版本,所以在最新的V1.3.15版本中没找到10版本:

d.于是我在历史的v 1.3.14中找到10版本:

e.然后我们下载source文件,因为rpm文件不好在ubuntu系统上安装。

3.安装pg_rman

3.1把刚才下载的文件放到Linux服务器上,然后解压

postgres@VM-20-13-ubuntu:/$ su root
密码输入
root@VM-20-13-ubuntu: tar xzvf pg_rman-1.3.14-pg10.tar.gz -C ./

3.2 解压完进入解压出来的文件夹./pg_rman-1.3.14-pg10

root@VM-20-13-ubuntu: cd ./pg_rman-1.3.14-pg10

3.3 按着readme.md指示操作

3.4 make

root@VM-20-13-ubuntu: make
这里make的时候我报了很多错:
a.没找到postgres_fe.h

解决方案:

root@VM-20-13-ubuntu: apt install postgresql-server-dev-10

这命令中的10是pgsql的版本号,我是用10版本就写10 ,如果是别的版本就自己改成别的版本号。

b.动态链接库的缺失

解决方案:

先 locate lib缺的库的名字.so

然后使用ln -s 去建立该库的软连接

eg.比如我刚才上图的 cannot find -lselinux 说明缺少的是selinux库(-l后面的就是缺少的库)

所以我要找libselinux.so(lib+库名+.so)

所以要:

root@VM-20-13-ubuntu: locate libselinux.so

结果:发现一个libselinux.so.1的位置,如下图:

那直接ln -s去建立真正的软连接

root@VM-20-13-ubuntu: ln -s /lib/x86_64-linux-gnu/libselinux.so.1 /lib/x86_64-linux-gnu/libselinux.so

然后make一下看看是否成功:

成功结果:

3.5 make install

root@VM-20-13-ubuntu: make install

成功结果:

4.初始化pg_rman

a.寻找pgsql的data文件夹路径,首先进入数据库。
root@VM-20-13-ubuntu: su postgres
postgres@VM-20-13-ubuntu:/$ psql
b.查找数据目录
postgres=# show data_directory;

结果如图:/var/lib/postgresql/10/main

c.设置pg_rman的备份文件夹目录,我这里设置为/home/backup_home/pgsql/pgrman_data(自己随便创建)。设置pgsql的data文件夹路径为/var/lib/postgresql/10/main。
postgres=# \q
postgres@VM-20-13-ubuntu:/$ su root
root@VM-20-13-ubuntu: pg_rman init -B /home/backup_home/pgsql/pgrman_data -D /var/lib/postgresql/10/main

结果一般为:

这里是说ARCLOG_PATH没有设置,因为它没检测到archive_command,那我们就直接去设置pg_rman.ini。

root@VM-20-13-ubuntu:~# vim /home/backup_home/pgsql/pgrman_data/pg_rman.ini

添加(自己酌情设置):

ARCLOG_PATH='/mnt/server/archivedir' 
BACKUP_PATH='/home/backup_home/pgsql/pgrman_data' # 设置backup—path以后使用pg_rman不用-B
PGDATA='/var/lib/postgresql/10/main' # 设置PGDATA以后使用pg_rman不用-D
compress_data=yes # 数据压缩
with-serverlog=yes
smooth-checkpoint=yes
keep-data-days=30 # 时间窗口,备份需要保证数据库可以恢复到时间窗口内的任意时间点
keep-arclog-days=30 # 保留几天内的归档文件
keep-srvlog-days=30 # 保留几天内的数据库日志文件
# keep-data-generations # 保留几代全备,如果设置为2,本次备份后不会删除上次备份
# keep-arclog-files # 保留多少个归档文件
# keep-srvlog-files # 保留几个数据库日志文件
d.开一下路径的权限:
root@VM-20-13-ubuntu: chown postgres:postgres -R /home/backup_home/pgsql
root@VM-20-13-ubuntu: su postgres -c "chmod 777 -R /home/backup_home/pgsql"

5.测试是否成功

登录一下postgres:

root@VM-20-13-ubuntu:~# su postgres
postgres@VM-20-13-ubuntu:/$ source /etc/profile

5.1全量备份测试:

postgres@VM-20-13-ubuntu:/$ pg_rman backup --backup-mode=full

成功结果:

它提示我们进行校验,那就进行校验:

postgres@VM-20-13-ubuntu:/$ pg_rman validate

成功结果:

5.2增量备份测试

增量备份之前必须有对应的全量备份。

pg_rman backup --backup-mode=incremental --progress

成功结果:

进行校验:

postgres@VM-20-13-ubuntu:/$ pg_rman validate

成功结果:

5.3查看备份的数据集

我们可以用pg_rman show查看备份的数据集:

postgres@VM-20-13-ubuntu:/$ pg_rman show

成功结果:

未校验备份集 Status 显示为 DONE,校验完成为OK,上图显示全部校验完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值