1、在主库创建物理复制槽
可以手动在主库创建物理复制槽,也可以不创建,在备库使用 pg_basebackup 创建备份时指定参数 -C -S 来创建复制槽。手动创建复制槽的 SQL 语句如下:
select * from pg_create_physical_replication_slot('slot_s1');
2、查看复制槽信息
select * from pg_replication_slots;
3、使用 pg_basebackup 创建备库
pg_basebackup -h 192.168.56.100 -p 5432 -R -C -S slot_s1 -D /data/pg/
- -R 表示写复制相关的配置文件,指定了 -R 参数,启动备库自动创建流复制
- -C 表示自动在主库创建复制槽,复制槽名称为 -S 指定,-C 必须与 -S 同时使用
- -S slot_s1 参数指定复制槽名称,备份完成后会自动在 postgresql.auto.conf 文件里加上参数 primary_slot_name = 'slot_s1'
4、启动备库并在主库上查看复制槽信息
select * from pg_replication_slots;
select * from pg_stat_replication;
5、相关参数
- max_replication_slots,表示复制槽的数量,取值范围为 0 ~ 0x3FFFF,默认值为 10, 设置为 0 表示禁用复制槽。
- wal_level,表示 wal 级别, 可取值 minimal,replica,logical,必须大于等于 replica 级别才能使用复制槽。
注:
使用复制槽一定要做好 wal 日志的个数和大小监控,在异步复制场景下,如果备库长时间离线,会导致主库的 wal 日志一直不能清除,最终导致磁盘空间被耗尽。