postgresql实现单主单从

实现步骤

1.主库创建一个有复制权限的用户

sql 复制代码
CREATE ROLE 用户名
 login # 有登录权限的角色即是用户
 replication #复制权限
encrypted password '密码';

2.主库配置开放从库外部访问权限

修改 pg_hba.conf 文件 (相当于开放防火墙)

sql 复制代码
# 类型  数据库        用户            地址                 方法

# "local" is for Unix domain socket connections only
host   all             上面创建的用户名           从库地址            trust


# Allow replication connections from localhost, by a user with the
# replication privilege.
host   replication             上面创建的用户名           从库地址            trust

上面是允许登录的 地址

下面是允许复制的地址

3.设置主库wal复制

修改主库配置文件 postgresql.conf

sql 复制代码
wal_level = replica # wal级别:minimal, replica, or logical

max_wal_senders = 4		# 最大发送进程数
wal_keep_size = 16		# 多大wal文件被写满,单位M; 0 disables
wal_sender_timeout = 60s	# wal发送超时时间

max_connections = 100 # 最大连接数,从库需要大于主库这个值

4.主库备份覆盖从库数据文件

1.删除从库的数据文件

2.使用物理备份命令备份主库数据文件到从库

sql 复制代码
pg_basebackup -h 主库地址 -p 主库端口 -D 复制到从库数据目录  -U 有复制权限的用户 -Fp -Xs -Pv -R --checkpoint=fast

5.配置从库备份主库信息

sql 复制代码
max_connections = 200

recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID 恢复哪个时间点


primary_conninfo = 'host=10.0.12.12 port=5432 user=用户名 password=密码'			# 连接主库信息
hot_standby = on			# "off" disallows queries during recovery
max_standby_streaming_delay = 30s	# 最大延迟时间
wal_receiver_status_interval = 10s	# 向主库发送wal接收状态时间
hot_standby_feedback = on		# 发送错误信息
wal_receiver_timeout = 60s		# 接收wal超时时间
wal_retrieve_retry_interval = 5s	# 等待重试时间间隔

6.重启从库

测试

查询复制信息

sql 复制代码
select client_addr,sync_state from pg_stat_replication;

表示主从部署成功

主宕机,从升主

模拟主库宕机,从库手动升级为主库,原主库恢复变成从库。

1.主库停机

2.从库使用命令 pg_ctl promote升级为主库

3.这时恢复原主库作为从库,需要同步主库数据

sql 复制代码
# 先删除这个从库数据,再同步主库数据
pg_basebackup -h 新主库地址 -D /var/lib/postgresql/data -p 新主库端口 -U 备份用户 -Fp -Xs -Pv -R --checkpoint=fast

还有一种 利用pg_rewind 命令实现增量同步数据这里没有实现

4.重启从库

5.验证

主库执行

select client_addr,sync_state from pg_stat_replication;

相关推荐
han_hanker12 分钟前
sql语法 DECODE, CASE ... WHEN
数据库·sql·oracle
井川廊咏20 分钟前
vi 删除指定范围的行,不用再反复按 dd
数据库·mysql
z落落1 小时前
StudentInfo表 分页、增删改 存储过程+C# WinForm 存储过程实现分页和增删改查
数据库·sql·mysql
影寂ldy1 小时前
WinForm 数据库【新增+编辑】完整功能(参数化查询+配置文件+防报错全套)
数据库
迷枫7122 小时前
达梦数据库 Hint 使用与 Hint 注入实战
数据库
Gauss松鼠会3 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
2601_965798473 小时前
How to Build a Custom Artisan Store on WordPress: Crafti Theme Review
linux·服务器·数据库
霸道流氓气质4 小时前
Spring 事务传播机制与 REQUIRES_NEW
java·数据库·spring
YOU OU4 小时前
Redis分布式锁
数据库·redis·分布式
小草儿7994 小时前
GBase 8s CLOB → VARCHAR(32739) 数据迁移方案文档
数据库