1.前提准备
(1)配置csvlog
在postgresql.conf(一定要配置在postgresql.conf中,配置
postgresql.auto.conf和alter system命令
没用)中添加:
log_destination = 'csvlog'
(2)开启归档
在postgresql.conf中添加:
wal_level需要修改replica或者以上,因为postgresql 10版本默认是replica所以不用修改。
archive_mode = 'on'
设置archive_command命令
需要提前创建归档目录,cp %p ${data_directory}/pg_arch/%f,这边示例目录:
/data/pgdata/pg_arch
archive_command = 'cp %p /data/pgdata/pg_arch/%f'
2.下载安装
pg_rman是用rpm包进行安装的,且需要提前安装postgresql10-libs这个依赖包,需要根据pg版本和环境来下载对应的rpm包。
pg_rman下载地址:
https://github.com/ossc-db/pg_rman/releases
postgresql10-libs下载地址:
https://yum.postgresql.org/10/
注意:安装rpm包不需要提前安装postgresql
测试的依赖版本:
potgresql :10.5版本
linux版本:CentOS 7.4
依赖版本:postgresql10-libs-10.7-1PGDG.rhel7.x86_64.rpm
pg_rman版本:pg_rman-1.3.8-1.pg10.rhel7.x86_64.rpm
[root@node3 xuli]# rpm -ivh postgresql10-libs-10.7-1PGDG.rhel7.x86_64.rpm
Preparing... ########################################### [100%]
1:postgresql10-libs ########################################### [100%]
[root@node3 xuli]# rpm -ivh pg_rman-1.3.8-1.pg10.rhel7.x86_64.rpm
Preparing... ########################################### [100%]
1:pg_rman ########################################### [100%]
pg_rman安装完成之后,会默认在/usr/pgsql-10/目录下(没有特殊需求就可以使用这个默认目录)
3.配置环境变量
可以选择的配置/etc/profile,但是建议配置postgres用户的.bashrc或者.bash_profile文件
su - postgres
vi ~/.bashrc
# 添加下列
export PGUSER=postgres
export PGPORT=5432
export PGPASSWORD=postgres
export PGHOSTADDR=192.168.14.36
export PG_RMAN=/usr/pgsql-10
export PATH=$PATH:$PG_RMAN/bin
export PGDATA=/data/pgdata
export BACKUP_PATH=/data/pgbackup
export ARCLOG_PATH=/data/pgdata/pg_arch
export SRVLOG_PATH=/data/pgdata/pg_log
4.创建归档目录和日志目录
需要在$PGDATA路径下创建pg_arch和pg_log,如果目录已经创建,则跳过这个步骤。
cd /data/pgdata/
su - postgres
mkdir pg_arch
mkdir pg_log
chmod 700 pg_arch
chmod 700 pg_log
重启pg数据库
pg_ctl restart -D /data/pgdata/
5.初始化备份目录
首先需要初始化一个backup catalog,实际上就是需要一个目录,这个目录将用于存放备份的文件。 同时这个目录也会存放一些元数据,例如备份的配置文件,数据库的systemid,时间线文件历史等等。 初始化命令需要两个参数,分别为备份目标目录,以及数据库的$PGDATA
[postgres@node3 pg_rman]$ pg_rman init
INFO: ARCLOG_PATH is set to '/data/pgdata/pg_arch'
INFO: SRVLOG_PATH is set to '/data/pgdata/log'
[postgres@node3 pg_rman]$ ll
total 16
drwx------ 4 postgres postgres 4096 Feb 1 11:52 backup
-rw-rw-r-- 1 postgres postgres 67 Feb 1 11:52 pg_rman.ini
-rw-rw-r-- 1 postgres postgres 40 Feb 1 11:52 system_identifier
drwx------ 2 postgres postgres 4096 Feb 1 11:52 timeline_history
生成的配置文件
[postgres@node3 pg_rman]$ cat pg_rman.ini
ARCLOG_PATH='/data/pgdata/pg_arch'
SRVLOG_PATH='/data/pgdata/log'
生成的数据库system id,用于区分备份的数据库是不是一个数据库,防止被冲。
[postgres@node3 pg_rman]$ cat system_identifier
SYSTEM_IDENTIFIER='6652494251747099991'