前置条件

  1. 主从服务器需安装相同版本的postgresql数据库;
  2. 确保主从服务器能相互访问对方的postgresql数据库;

主端

1.创建流复制用户

此用户用于当主端的数据变更时进行热更新

  1. CREATE USER 用户名 replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD ‘密码’;
  2. //查看所有用户
  3. select * from pg_user;
  4. //查看所有角色
  5. select * from pg_roles;

2.修改pg_hba.conf文件

该文件一般位于postgresql数据库安装目录下的data文件夹内,主要是对访问数据库的来源进行限制,类似防火墙
添加内容:host replication 流复制用户名 从端地址 md5
如:host replication hotbackup 192.168.36.26/32 md5

3.修改postgresql.conf文件

该文件一般位于postgresql数据库安装目录下的data文件夹内
添加如下内容

max_wal_senders = 1 
wal_level = hot_standby 
archive_mode = on 
archive_command = 'cd ./' 
hot_standby = on 
wal_keep_segments = 64

max_wal_senders是slave库的节点数,有多少个slave库就设多少,
wal_level是write ahead log参数值,设置流复制务必将此值更新成hot_standby
wal_keep_segments默认值是16,是PG_XLOG下的日志文件数相关参数
archive也可以选择关闭,归档是定时恢复用的,流复制不是必须的

4.主端data备份

开启文件备份,前提是wal_level参数值必须是archive或者host_standby,在上一步已经配置过了。执行如下sql开启备份:

select pg_start_backup('Replition work');
  1. 关闭从端数据库服务;
  2. 清空从端的data下的所有内容;
  3. 然后将主端data的所有内容复制到从端的data下;
  4. 删除从端下的postmaster.pid和pg_xlog下的内容;
  5. 结束主端的备份,执行如下sql:
    select pg_stop_backup();
    
    然后修改从端pg_hba.conf文件使其主端能访问;

从端

1.修改从端recovery.conf配置文件

将数据库安装目录下share文件夹内的recovery.conf.sample文件复制到安装目录下data文件夹内,修改名称recovery.conf,添加如下内容:

standby_mode ='on' 
primary_conninfo='host=192.168.36.25 port=5432 user=hotbackup password=smgi keepalives_idle=60'

说明:上面的地址 host=主端的地址,port端口也是,user和password是之前创建的流复制用户和密码

2.修改从端pgpass.conf配置文件

该文件的默认地址在:C:\Users\Administrator\AppData\Roaming\postgresql。
这个文件里面可以放入连接远程数据库的默认账号密码,免去手动连接输入账号密码。
添加如下内容:

192.168.1.160:5432:postgres:repuser:repuser

说明:上面ip是主端的地址,端口也是,postgres是你的数据库名,repuser:repuser是账号和密码,是第二步创建的流复制用户名和密码。

3.启动从端数据库

打开从端的数据库, 可以看到从端和主端上面的数据库是一样的,当对主端数据库进行insert,update,delete操作时,从端也会同步更新数据,且从端的会话为只读,不能进行insert,update,delete操作。
如果从端数据库服务启动失败,则需要看data/pg_log的日志。