postgre 主从
主 10.12.18.79
从 10.12.18.120
主库操作如下:
创建replica相关权限
psql>CREATE ROLE replica login replication encrypted password '密码';
配置
配置pg_hba.conf文件,配置文件在安装设置的data目录下
在文件末尾增加一行,增加replica的用户,来进行数据库同步操作。
host replication all 10.12.18.120/32 md5
备注:以自己的实际目录为主
编辑数据目录下面postgresql配置文件
在未尾添加以下信息
wal_level = hot_standby
max_wal_senders = 10
wal_sender_timeout = 60s
刷新配置或重启db
psql>select pg_reload_conf();
关闭数据库
pg_ctl restart -D "E:\pgdata"
从库配置
1 关闭从库
pg_ctl stop -D "E:\pgdata" -m fast
2 从主库上拉取数据
c:\PostgreSQL\13\data>pg_basebackup -F p --progre -h 10.12.18.79 -p 5432 -U replica --password -R
这时,就可以看到备库服务器上自动生成了standby.signal文件。同时,也看到在$PGDATA路径下,数据库自动帮我们配置了关于流复制的主库的信息:
注意,备份选项上带有-R选项。
3 把原来的数据目录删除或修改名称
4 修改数据目录的权限现象 CMD启动报 pg_console permission denied
原因 DATA目录权限不足 解决方法 给DATA目录Everyone 及 users权限
5启动从库
shell>pg_ctl start -D "数据目录"
验证
在主库上执行
psql>select * from pg_stat_replication
无异常,会显示从库的信息
在业务表添加或修改数据,在从库上查看数据是否正确
shell>select pg_is_in_recovery() 显示F表示是主库,T表示从
手工切换
主 关闭主库
Shell>pg_ctl stop -D "目录" -m fast
从库
Psql>select pg_promote(true,60);
60表示60秒
shell>select pg_is_in_recovery() 显示F表示是主库,T表示从