前置条件
- 主从服务器需安装相同版本的postgresql数据库;
- 确保主从服务器能相互访问对方的postgresql数据库;
主端
1.创建流复制用户
此用户用于当主端的数据变更时进行热更新
CREATE USER 用户名 replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD ‘密码’;
//查看所有用户
select * from pg_user;
//查看所有角色
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');
- 关闭从端数据库服务;
- 清空从端的data下的所有内容;
- 然后将主端data的所有内容复制到从端的data下;
- 删除从端下的postmaster.pid和pg_xlog下的内容;
- 结束主端的备份,执行如下sql:
然后修改从端pg_hba.conf文件使其主端能访问;select pg_stop_backup();
从端
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的日志。