今天用pg_basebackup搭建了主备流复制环境,操作流程很简单,可在线操作,相当方便。
环境均为CentOS6.6 + postgresql9.4,我用已安装的库做测试,端口不一致,不影响环境搭建,但要注意某些相关配置:
主:192.168.3.201 port:5431
备:192.168.3.202 port:5432
数据库安装过程省略。可参考
http://blog.csdn.net/baiyinqiqi/article/details/45560229
主库参数配置postgresql.conf:
wal_level = hot_standby
checkpoint_segments = 16
checkpoint_timeout = 5min
archive_mode = on
max_wal_senders = 3
wal_keep_segments = 16
主库创建具有replication权限的用户:
create user rep replication login encrypted password 'udbac';
主库修改认证配置文件,添加rep的replication认证信息:
host replication rep 192.168.3.202/32 md5
主库重载数据库配置信息:pg_ctl reload
从库只安装数据库软件,不进行数据库初始化。
根据主库相关路径配置,创建日志目录,表空间目录。
比如主库的表空间如下:
在从库中创建相同的目录,并授权给postgres用户:
[root@CentOS_202 postgres]# mkdir -p /pg_tablespace/pg_5431/ts_bigtable
[root@CentOS_202 postgres]# chown -R postgres.postgres /pg_tablespace
[root@CentOS_202 postgres]# chown -R postgres.postgres /pg_tablespace/pg_5431
[root@CentOS_202 postgres]# chown -R postgres.postgres /pg_tablespace/pg_5431/ts_bigtable
[root@CentOS_202 postgres]# mkdir -p /pg_tablespace/pg_5431/ts_udbac
[root@CentOS_202 postgres]# chown -R postgres.postgres /pg_tablespace/pg_5431/ts_udbac
[root@CentOS_202 postgres]# chmod 0700 /pg_tablespace
[root@CentOS_202 postgres]# chmod 0700 /pg_tablespace/pg_5431
[root@CentOS_202 postgres]# chmod 0700 /pg_tablespace/pg_5431/ts_bigtable
[root@CentOS_202 postgres]# chmod 0700 /pg_tablespace/pg_5431/ts_udbac
当然$PGDATA目录同样不可少。
配置从库无密码访问主库的密码文件:
在postgres用户home目录下创建.pgpass文件,添加如下内容:
192.168.3.201:5431:replication:rep:udbac
.pgpass文件权限为0600:chmod 0600 .pgpass
测试无密码是否可连接主库:
psql -h 192.168.3.201 -p 5431 -U rep -d postgres
使用pg_basebackup进行数据库备份恢复:
pg_basebackup -D $PGDATA -F p -X stream -v -P -h 192.168.3.201 -p 5431 -U rep
查看数据文件恢复情况:
表空间恢复情况:
配置备库参数postgresql.conf:
hot_standby=on
注意:我这里主备库所用端口不一样,需要详细修改配置文件,比如port,有些目录是以端口命名的也需要修改。第一次做就碰到找不到log日志的情况,因为我的安装目录带有端口号,所以找不到。一般情况下,尽量使用一样的端口。
配置备库recovery.conf配置文件:
cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf
vi $PGDATA/recovery.conf
修改下列参数:
standby_mode = on
primary_conninfo = 'host=192.168.3.201 port=5431 user=rep'
trigger_file = '/usr/local/postgresql/9.4.1/pg5432/data/postgresql.trigger.5431'
启动备库,查看服务进程,请注意有一个wal receiver progress进程,这个是接收wal日志的进程:
同样主库也多了一个wal sender process进程,用于日志发送。
测试:
在主库中新建一张表tbl6,并插入一些数据:
在从库中进行查询,从库可查询,但不可更新数据:
参考文章:
http://francs3.blog.163.com/blog/static/4057672720136210240967/