由于项目需要,需要在两台windows服务器上配置pgsql主从备份,记录一下流程及踩过的坑。
一. 环境配置
主机(192.168.0.200)
操作系统:Windows Server 2019
数据库版本:Postgresql 14.5
从机(192.168.0.201)
操作系统:Windows Server 2019
数据库版本:Postgresql 14.5
二. 主库配置
(数据库安装及初始化略过)使用 pgAdmin 或者 SQL shell(psql) 登录数据库
1. 创建备份用账户(replica)
CREATE ROLE replica login replication encrypted password 'replica';
2. 配置pg_hba.conf (位于 <安装目录>\PostgreSQL\14\data下)
在文件最后插入
host replication replica 192.168.0.201/32 scram-sha-256
3. 配置postgresql.conf (位于 <安装目录>\PostgreSQL\14\data下)
修改文件的配置参数(修改及移除注释)
listen_addresses = '*'
wal_level = replica
max_wal_senders = 32
wal_keep_size = 256
wal_sender_timeout = 60s
4. 重启主机Postgresql服务
三. 从机配置
(数据库安装及初始化略过,windows安装时会自动初始化,无妨)
1. 停止从机Postgresql服务,否则第二步会导致无法删除
2. 删除 <安装目录>\PostgreSQL\14下的data文件夹
3. 使用pg_basebackup (位于<安装目录>\PostgreSQL\14\bin下) 完整备份主机数据库
在Command Prompt中键入
cd <安装目录>\PostgreSQL\14\bin
pg_basebackup -D <安装目录>\PostgreSQL\14\data -h 192.168.0.200 -p 5432 -U replica -X stream -P
4. 配置postgresql.conf (位于 <安装目录>\PostgreSQL\14\data下)
#以下请移除注释或修改
max_connections = 1000 #必须大于主库的最大连接数
recovery_target_timeline = 'latest'
primary_conninfo = 'host=192.168.0.200 port=5432 user=replica password=replica'
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
#以下配置请移除或注释
wal_level = replica
5. 新建standby.signal (位于 <安装目录>\PostgreSQL\14\data下)
在文件中添加
standby_mode = on
6. 启动从机Postgresql服务
四. 坑
从机服务无法启动(data文件夹的权限问题)
在文件夹 属性-安全 中将SYSTEM、Administrators和Users都赋予完全控制权限即可丝滑启动