本人是用了两台虚拟机搭建
主备
流复制环境,操作流程很简单:
虚拟机 的 IP和 端口
主库: 192.168.1.189 5432 用户:postgres
备库: 192.168.1.200 5432 用户:postgres
虚拟机必须先安装postgres数据库,
2. 解压解压postgresql-9.5.5.tar.gz:
tar -xzvf postgresql-9.5.5.tar.gz
3.编译postgres代码 (在root用户下操作)
cd postgresql-9.5.5
mkdir -p /opt/sql
./configure --prefix=/opt/sql
make
make install
至此,完成postgresql的安装。进入/opt/sql目录可以看到安装后的postgresql的文件
4.切回postgres用户,配置环境变量
vi .bash_profile
主库
设置以下环境变量
export PGHOME=/opt/sql
export PGDATA =~/data
备库
设置以下环境变量
export PGHOME=/opt/sql
export PGDATA =~/standby
5. 初始化数据库
主备分别执行iniitdb
6.检查数据库是否安装成功
pg_ctl start
7.修改主库的配置文件
cd $HOME/data/
vi postgresql.conf
配置修改为:
wal_level = hot_standby
#synchronous_commit = on(同步复制,-- 实时,如果需要异步改为off)
checkpoint_timeout = 5min
archive_mode = on
archive_command = '/bin/date'
max_wal_senders = 2
wal_keep_segments = 16
hot_standby = on
max_standby_archive_delay = 300s
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 1s
hot_standby_feedback = on
wal_receiver_timeout = 60s
-----------------------------------------------
vi pg_hba.conf
配置修改为:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 trust
添加IP 可以让备库访问到主库
host replication repuser 192.168.1.200/32 md5
replication 数据库必须是这个名字
repuser 数据库用户名
创建数据库用户repuser
psql postgres postgres
postgres-# create role repuser login replication encrypted password '123';
5.添加密码文件
登陆备库
cd && vi .pgpass
192.168.1.189:5432:replication:repuser:123
.pgpass文件权限为0600:chmod 600 .pgpass
cd && rm -rf standby
使用pg_basebackup进行数据库备份恢复:
pg_basebackup -F p -D $PGDATA -h 192.168.1.189 -p 5432 -U repuser
配置备库参数postgresql.conf:
standby_mode = on
primary_conninfo = 'host=192.168.1.189 port=5432 user=repuser'
trigger_file = '/home/postgres/standby/postgresql.trigger.5432'
启动备库,查看服务进程,请注意有一个wal receiver progress进程,这个是接收wal日志的进程:
同样主库也多了一个wal sender process进程,用于日志发送。
测试:
在主库中新建一张表,并插入一些数据:
create table t1(id int);
insert into t1 values (1);
在从库中进行查询,从库可查询,但不可更新数据:
select * from t1;