1. 参数设置
要想使用wal2json逻辑复制,要设置以下参数:
wal_level = logical
enable_slot_log = on
wal_level设置为logical,表示WAL日志支持逻辑复制。如果需要进行备机解码,要在对应的主机上设置enable_slot_log为on。
2. 逻辑复制槽的使用
2.1 创建逻辑复制槽
下面来创建一个逻辑复制槽例子,复制槽名为test_slot,使用的复制槽插件为wal2json。
select pg_create_logical_replication_slot('test_slot', 'wal2json');
2.2 查询逻辑复制槽
select * from pg_replication_slots;
select pg_get_replication_slots();
PG_REPLICATION_SLOTS视图查看复制槽的信息。
名称 | 类型 | 描述 |
slot_name | text | 复制槽的名称。 |
plugin | text | 逻辑复制槽对应的输出插件名称。 |
slot_type | text | 复制槽的类型。 physical:物理复制槽。 logical:逻辑复制槽。 |
datoid | oid | 复制槽所在的数据库OID。 |
database | name | 复制槽所在的数据库名称。 |
active | boolean | 复制槽是否为激活状态。 t(true):表示是。 f(false):表示不是。 |
xmin | xid | 数据库须为复制槽保留的最早事务的事务号。 |
catalog_xmin | xid | 数据库须为逻辑复制槽保留的最早的涉及系统表的事务的事务号。 |
restart_lsn | text | 复制槽需要的最早xlog的物理位置。 |
dummy_standby | boolean | 复制槽的连接对端是否为从备。 t(true):表示是。 f(false):表示不是。 |
confirmed_flush | text | 逻辑复制槽专用,客户端确认接收到的日志位置。 |
2.3 删除逻辑复制槽
select pg_drop_replication_slot('test_slot');
2.4 解码复制槽
有2种方式解码复制操,一种是解码不推进复制槽(下次解码可以再次获取本次解出的数据),另一种是解码并推进复制槽。
解码不推进复制槽pg_logical_slot_peek_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value')
解码并推进复制槽pg_logical_slot_get_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value')
下面举例:
创建一张表并插入数据
postgres=# create table t1(id int, c1 int);
CREATE TABLE
postgres=# insert into t1 values (1,1);
INSERT 0 1
postgres=# insert into t1 values (2,2);
解码并推进逻辑槽
select pg_logical_slot_get_changes('test_slot', null, null);
解码不推进逻辑槽
没有记录是正常的,因为之前已经推进过逻辑槽,如果再有新的数据变动,就会查询到结果。
3. 逻辑复制槽监控
select
slot_name,
database as datname,
plugin,
slot_type,
datoid,
database,
active,
xmin,
catalog_xmin,
restart_lsn,
pg_size_pretty(pg_xlog_location_diff(
case
when pg_is_in_recovery() then pg_last_xlog_receive_location()
else pg_current_xlog_location()
end ,
restart_lsn)) as delay_lsn_bytes,
dummy_standby,
confirmed_flush
from pg_replication_slots;
由于不推进复制槽,会使得GBase不能自动清理WAL日志,日志的积累会占用本地磁盘空间,通过该SQL可以查询当前逻辑槽所需的LSN到最新LSN之间的字节数,以此来大致判断是否应该推挤复制槽。
标签:slot,逻辑,wal2json,解码,logical,复制,GBase8c,pg From: https://blog.51cto.com/u_17026136/12058016