PostgreSQL使用pg_basebackup搭建主备流复制环境

来源:互联网 发布:二战德国实力 知乎 编辑:程序博客网 时间:2024/06/06 06:44

今天用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/

0 0
原创粉丝点击