首页 > 数据库 >openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码

openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码

时间:2023-12-29 21:32:44浏览次数:52  
标签:逻辑 解码 复制 slot1 openGauss 数据库

openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码

openGauss可以通过调用SQL函数,进行创建、删除、推进逻辑复制槽,获取解码后的事务日志。

178.1 前提条件

  • 逻辑日志目前从主机节点中抽取,默认关闭SSL连接,如果进行逻辑复制,需要先配置GUC参数ssl=on。

    img 说明:

    为避免安全风险,请保证启用SSL连接。

  • 设置GUC参数wal_level=logical。

  • 设置GUC参数max_replication_slots>每个节点所需的(物理流复制槽数+逻辑复制槽数)。

    物理流复制槽提供了一种自动化的方法来确保主节点在所有备节点或从备节点收到xlog之前,xlog不会被移除。也就是说物理流复制槽用于支撑主备节点HA。数据库所需要的物理流复制槽数为:备节点加从备的和与主节点之间的比例。例如,假设数据库的高可用方案为1主、1备、1从备,则所需物理流复制槽数为2。

    关于逻辑复制槽数,请按如下规则考虑。

    • 一个逻辑复制槽只能解码一个Database的修改,如果需要解码多个Database,则需要创建多个逻辑复制槽。
    • 如果需要多路逻辑复制同步给多个目标数据库,在源端数据库需要创建多个逻辑复制槽,每个逻辑复制槽对应一条逻辑复制链路。
  • 仅限初始用户和拥有REPLICATION权限的用户进行操作。三权分立关闭时数据库管理员可进行逻辑复制操作,三权分立开启时不允许数据库管理员进行逻辑复制操作。

  • 目前默认不支持主备从部署模式。

178.2 操作步骤

  1. 以数据库安装用户登录openGauss数据库主节点。

  2. 使用如下命令通过连接默认数据库postgres。

    gsql -d postgres -p 16000 -r
    

    其中,16000为数据库端口号,用户可根据实际情况替换。

  3. 创建名称为slot1的逻辑复制槽。

    openGauss=# SELECT * FROM pg_create_logical_replication_slot('slot1', 'mppdb_decoding');
    slotname | xlog_position
    ----------+---------------
    slot1    | 0/601C150
    (1 row)
    
  4. 在数据库中创建表t,并向表t中插入数据。

    openGauss=# CREATE TABLE t(a int PRIMARY KEY, b int);
    openGauss=# INSERT INTO t VALUES(3,3);
    
  5. 读取复制槽slot1解码结果,解码条数为4096。

    openGauss=# SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096);
    location  |  xid  | data                                                                                         
    -----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------
    -------------------------------------------
     0/601C188 | 1010023 | BEGIN 1010023
     0/601ED60 | 1010023 | COMMIT 1010023 CSN 1010022
     0/601ED60 | 1010024 | BEGIN 1010024
     0/601ED60 | 1010024 | {"table_name":"public.t","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/601EED8 | 1010024 | COMMIT 1010024 CSN 1010023
    (5 rows)
    
  6. 删除逻辑复制槽slot1。

    openGauss=#  SELECT * FROM pg_drop_replication_slot('slot1');
     pg_drop_replication_slot
    --------------------------
    
    (1 row)
    

标签:逻辑,解码,复制,slot1,openGauss,数据库
From: https://blog.51cto.com/shuchaoyang/9031873

相关文章

  • Unity引擎2D游戏开发,血量更新逻辑的实现
    思路能够发现FillAmount就是控制血量条长度的控件,它是一个百分比值,则可以通过当前血量除以最大血量得到当前血量的百分比。那么,也就能控制血量条的长度了。编写基本的更新逻辑创建C#文件将C#文件挂载到PlayerStateBar上在C#文件中调用UI组件前,需要调用UI组件库usingU......
  • openGauss学习笔记-176 openGauss 数据库运维-实例主备切换
    openGauss学习笔记-176openGauss数据库运维-实例主备切换176.1操作场景openGauss在运行过程中,数据库管理员可能需要手工对数据库节点做主备切换。例如发现数据库节点主备failover后需要恢复原有的主备角色,或怀疑硬件故障需要手动进行主备切换。级联备机不能直接转换为主机,只能......
  • openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
    openGauss学习笔记-175openGauss数据库运维-备份与恢复-导入数据-管理并发写入操作示例本章节以表test为例,分别介绍相同表的INSERT和DELETE并发,相同表的并发INSERT,相同表的并发UPDATE,以及数据导入和查询的并发的执行详情。CREATETABLEtest(idint,namechar(50),addressva......
  • openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
    openGauss学习笔记-174openGauss数据库运维-备份与恢复-导入数据-管理并发写入操作174.1事务隔离说明openGauss基于MVCC(多版本并发控制)并结合两阶段锁的方式进行事务管理,其特点是读写之间不阻塞。SELECT是纯读操作,UPDATE和DELETE是读写操作。读写操作和纯读操作之间并不会发......
  • Base64 编码/解码应用
    staticcharbase64_table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";intbase64_encode(constvoid*src,size_tsrc_len,char*dst){ constunsignedchar*s=(constunsignedchar*)src; size_ti=0; size_tlen=0......
  • html复制文本逻辑
    //复制文本functioncopyTxt(text){if(navigator.clipboard){navigator.clipboard.writeText(text)$Sys.notify('复制成功')}elseif(document.execCommand){letinput=document.createElement(�......
  • Unity引擎2D游戏开发,受伤及死亡的逻辑和动画
    裁切素材制作受伤动画略制作死亡动画由于没有死亡动画素材,所以直接调整Alpha通道数值,使其逐渐消失在Animations中复制野猪受伤动画,命名为boarDeadAnimator中拖入boarDead动画点击AddProperty,选择Color将最后一帧的Alpha值改为0Animator连接动画逻辑从AnyState连接......
  • vue3学习之逻辑复用
    逻辑复用-组合式函数 src/views/ad/User.vue<scriptsetup>import{useMouse}from"../../js/mouse.js";import{useFetch}from"../../js/fetch.js";import{ref,computed}from"vue";//组合式函数const{x,y}=useMouse();/......
  • Python为什么空字符串的逻辑值是True
    在Python中,空字符串(即'')的逻辑值被定义为True。这是因为Python中的逻辑值是基于所谓的"真值测试"规则进行判断的。根据这个规则,除了一些特定的值被认为是False之外,其他所有的值都被认为是True。在Python中,以下值被认为是False:-None-False-0(包括0.0和其他表示零的数值)-空的容器对象(......
  • 跟着王洋老师学编程 - 1.5 小球撞墙(switch逻辑,问题是:小球会出现消失的状态。。)
    一、我的思路-创建窗体、设定窗体大小-在窗体中添加画布,并将画布添加至线程-线程run()方法持续执行,坐标不断变化,画布随之重绘,形成小球下落的效果,并随时判断小球X轴、Y轴坐标,触底后,通过flag值调整坐标加减方向代码一1importjava.awt.*;2publicclassBallHitWall{......