主:
操作系统:windows10
数据库版本:postgresql-16.2
ip:192.168.3.254
从:
操作系统:windows10
数据库版本:postgresql-16.2
ip:192.168.3.253
配置主库
配置 pg_hba.conf 文件
在 pg 的安装目录下,找到 pg_hba.conf 文件
目录示例:C:\Program Files\PostgreSQL\16\data
在文件末尾增加一行代码,目的是增加名为 replica 的用户,以进行数据库 同步的操作。填写的 ip 为从数据库的地址。
host replication replica 192.168.3.253/32 md5
创建 replica 相关权限
CREATE ROLE replica login replication encrypted password 'replica111'
配置 postgresql.conf 文件
在 pg 的安装目录下,找到 postgresql.conf 文件,查找并修改如下配置(如 果前面有#,需要删除#字符):
listen_addresses = '*' //设置监听所有地址
wal_level = replica //设置流复制模式至少设置为replica
max_wal_senders = 32 //这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_size = 500 //pg_wal 目录下保留 WAL 日志的个数,每个 WAL 文件默认 16M,为保 障从库能在应用归档落后时依旧能追上主库,此值建议设置较大一点。
wal_sender_timeout = 60s//设置流复制主机发送数据的超时时间
然后重新启动主库
配置从库
配置 data
首先将主数据库的 data 文件夹内容通过 pg_basebackup 备份过来
pg_basebackup -F p --progress -D "C:\Program Files\PostgreSQL\16\data_back" -h 192.168.3.254 -p 2903 -U replica --password
输入密码 replica 等待备份结束
然后关闭从库 pg 服务,打开主库PostgreSQL\16\的目录可以看到多出了 data_back出来, 此时备份并删除从库data 文件夹,将data_back复制并粘贴到从库修改data_back文件夹名为data。
配置 postgresql.conf 文件
listen_addresses = '*' //设置监听所有地址
primary_conninfo = 'host=192.168.3.254 port=2903 user=replica password=replica111'
recovery_target_timeline = 'latest'
hot_standby = on //此参数控制在恢复归档期间是否支持只读操作,设置为 ON 后从库为只读模式。
max_standby_streaming_delay = 30s //数据流备份的最大延迟时间
wal_receiver_status_interval = 10s //多久向主报告一次从的状态,当然从每次数据复制都会向主 报告状态,这里只是设置最长的间隔时间。
hot_standby_feedback = on//如果有错误的数据复制,是否向主进行反馈
然后在data目录自建一个standby.signal文件,用于指示standby模式
启动从库
确认是否成功
select client_addr,sync_state from pg_stat_replication;
出现如下的查询结果,便说明已经开始同步了
主从切换
如果主库挂了,需要紧急使用从库来作为主库,以便服务能尽快恢复,操作方法如下:
(1)改一下从库的standby.signal文件名为standby.signal_1。
(2)主库上新增standby.signal文件,按照上文的从库配置方式配置一遍主库,将从库的配置注释即可。
修改软件程序链接的数据库地址即可