primary和standby在同一服务器的不同目录下。
primary: /var/postgre/data
standby: /var/postgre/data1
1. 加账号 (也可以使用postgres账号)
[postgres@v-vlxsz-devdb01 data]$ psql
psql (14.1)
Type "help" for help.
postgres=# create role replica with replication login password '123456';
CREATE ROLE
postgres=# alter user replica with password '123456';
ALTER ROLE
postgres=#
2.修改pg_hba.conf文件,加入如下一行:
host replication replica 0.0.0.0/0 md5
3.vi postgresql.conf
wal_level = replica
max_wal_senders = 10 #最多可以有几个流复制连接,差不多有几个从就设置几个
wal_keep_size = 128 (?)
wal_sender_timeout = 60s #流复制主机发送数据库的超时时间
max_connections = 200
hot_standby = on #说明这台机器不仅仅用于数据归档也用于数据查询
max_standby_streaming_delay = 30s #数据流备份的最大延迟时间
wal_receiver_status_interval = 10s #多久向主机报告一次从的状态,从每次数据复制都会向主报告状态,这里只是设置最长的时间间隔
hot_standby_feedback = on #如果有错误的数据复制,是否向主进行反馈
wal_log_hints = on # also do full page writes of non-critical updates
4.主库备份
$ pg_basebackup -D /var/postgre/backup/ -Ft -Pv -Ureplica
5.从库恢复
$ tar -xvf base.tar -C /var/postgre/data1
$ tar -xvf pg_wal.tar -C /var/postgre/archive1
6.从库配置文件修改
$ vi standby.signal
standby_mode = 'on'
$ vi postgresql.conf
primary_conninfo = 'host=localhost port=5432 user=replica password=123456'
restore_command = 'cp /var/postgre/archive1/%f %p'
recovery_target_timeline = 'latest'
max_connections = 200
hot_standby = on #说明这台机器不仅仅用于数据归档也用于数据查询max_standby_streaming_delay = 30s #数据流备份的最大延迟时间
wal_receiver_status_interval = 10s #多久向主机报告一次从的状态,从每次数据复制都会向主报告状态,这里只是设置最长的时间间隔
hot_standby_feedback = on #如果有错误的数据复制,是否向主进行反馈
max_wal_senders = 10 #最多可以有几个流复制连接,差不多有几个从就设置几个
max_standby_archive_delay = 30s
port = 5433 #因为主从在同一台,所以从的端口要改下
archive_command = 'test ! -f /var/postgre/archive1/%f && cp %p /var/postgre/archive1/%f' #也是因为在同一台的缘故索引要修改
7.从库启动
pg_ctl start -D /var/postgre/data1
8.检查是否同步
主库检查
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
从库检查:psql -p 5433 -c "\x" -c "select * from pg_stat_wal_receiver;"
也可以在主库上创建一个对象,然后再在从库上检查下是否创建成功