当前位置: 首页 > news >正文

优化网站 主题中国建筑业协会

优化网站 主题,中国建筑业协会,网站营销优化,WordPress 4.7漏洞【GaussDB】在逻辑复制中剔除指定用户的事务 1. 需求背景 在逻辑复制中,期望对源端指定用户的所有操作不复制到目标端。然而WAL日志中没有用户信息可用于过滤,因此考虑结合审计日志来实现这一需求。 2. 解决方案 2.1 配置审计日志 首先需要开启事务…

【GaussDB】在逻辑复制中剔除指定用户的事务

1. 需求背景

在逻辑复制中,期望对源端指定用户的所有操作不复制到目标端。然而WAL日志中没有用户信息可用于过滤,因此考虑结合审计日志来实现这一需求。

2. 解决方案

2.1 配置审计日志

首先需要开启事务号记录和指定用户的全量审计:

--开启记录事务号 
gs_guc reload -c "audit_xid_info=1"--配置指定用户开启全量审计
gs_guc reload -c "full_audit_users='ogadmin'"

2.2 查询指定用户的事务号

通过以下SQL查询指定用户的所有事务号:

--查询指定用户的所有事务号
with t as (
select case when substr(detail_info,1,3)='xid' and substr(detail_info,4,3)<>'=NA'  then regexp_replace(detail_info,'xid=(\d+),.*','\1') end as transactionid, * from gs_query_audit('19000101','30000101') where username='ogadmin' )select * from t where transactionid is not null;

查询结果示例:

transactionidtimetyperesultuseridusernamedatabaseclient_conninfoobject_namedetail_infonode_namethread_idlocal_portremote_port
9285062025-06-26 13:34:22.000 +0800ddl_tableok16728ogadminpostgresgsql@[local]t7xid=928506, create table t7(a int);primary140316575266560@8042312624752037456null
9288102025-06-26 13:40:41.000 +0800ddl_schemaok16728ogadminpostgresgsql@[local]s2xid=928810, create schema s2;primary140316575266560@8042316410791307456null
9290012025-06-26 13:44:46.000 +0800dml_actionok16728ogadminpostgresgsql@[local]t7xid=929001, insert into t7 values (1);primary140316575266560@8042318866633567456null

2.3 审计日志事务号提取问题分析

GaussDB的ADM_AUDIT_TRAIL视图中已尝试截取出事务号,但该视图的SQL存在问题:

CASEWHEN "position"(a.detail_info, 'xid = NA'::text) = 1 AND "position"(a.detail_info, 'xid'::text) = 1 THEN NULL::textELSE substr(a.detail_info, "position"(a.detail_info, '='::text) + 1, "position"(a.detail_info, ','::text) - "position"(a.detail_info, '='::text) - 1)
END AS transactionid

主要问题:

  1. 实际日志中是xid=NA而非xid = NA,导致第一段条件永远无法匹配
  2. 当detail_info中存在其他=号时(如配置guc参数),会错误截取非事务号内容(如'bind_procedure_searchpath

因此需要自行从原始detail_info中截取事务号。

3. 方案实施挑战

3.1 关键问题分析

实施此方案需要解决以下核心问题:

  1. 审计日志完整性:如何确保审计日志记录是完整的?
  2. 逻辑嵌入:如何将剔除事务的逻辑嵌入到原有的逻辑复制程序中去?
  3. 操作顺序:如何确保各项操作的先后顺序?
  4. 资源消耗:如何减少重复查询审计日志的资源消耗(可否直接基于操作系统的存储接口去监控审计日志文件的变化)?

4. 替代方案:基于事务标签的过滤机制

PostgreSQL在双向复制中,通过在事务上标记名称来区分源端事务,防止循环复制,GaussDB同样具有此能力:

gaussdb 已移除pg_recvlogical二进制程序,仅保留了相关接口,为测试方便,这里实际是使用MogDB测试的
# 服务端
--创建一个复制槽
pg_recvlogical -d postgres -S test_slot --create--创建复制源标签
select pg_replication_origin_create('maintain_node');# 采集端
--开启流式解码
pg_recvlogical -d postgres -S test_slot --start -v -f -## sql执行客户端
--执行一些SQL,采集端可以捕获到数据--绑定当前会话标签
select pg_replication_origin_session_setup ('maintain_node');---执行一些SQL,采集端没有捕获到数据--解绑当前会话标签
select pg_replication_origin_session_reset ();--执行一些SQL,采集端可以捕获到数据# 环境清理
pg_recvlogical -d postgres -S test_slot --drop
select pg_replication_origin_drop('maintain_node');

原理:逻辑复制输出插件(如pgoutput、pg_recvlogical或test_decoding)默认会忽略携带复制源标签的事务,因为这些事务被视为"已同步过的数据",避免重复复制。

可以通过创建登录事件触发器,针对指定用户的登录自动打上复制源标签,从而实现指定的用户事务不复制。

5. 推荐方案:历史表归档策略

我个人不认为数据复制软件是用来处理这种归档操作的。比较通用的方式是:

  1. 源库对需要归档的表,在当前库建立历史表
  2. 归档时将需要归档的数据插入到历史表,然后删除当前表已归档的数据
  3. 对于历史表的修改操作(一般只有运维delete或truncate),配置同步规则,不进行数据删除的同步
  4. 可新建一个schema存放历史表,便于在复制软件中进行规则配置
  5. 复制软件针对历史表进行增量复制,对于实时表进行全量复制(其实这是ETL该干的事了)

虽然插入历史表会产生额外IO,可能使数据归档操作时间翻倍,但相比剔除事务不同步的方式,历史表方式更加安全,避免剔除事务时遗漏某些关键事务。

6.总结

本文探讨了在GaussDB中实现指定用户操作不复制到目标端的三种方案:

  1. 基于审计日志的事务过滤
    审计日志方案通过提取事务号实现过滤,但面临审计日志完整性、逻辑嵌入复杂性、操作顺序保证和资源消耗等挑战。虽然技术上可行,但实施复杂度较高,且存在事务遗漏风险。
  2. 基于逻辑复制标签的过滤
    基于逻辑复制标签实现过滤,技术上可行,但打标签这个附加操作需要在执行sql前执行(除非使用触发器,但触发器属于高风险操作,不建议使用),如果漏执行,将会存在错误覆盖目标库的风险。
  3. 基于历史表的归档策略
    历史表归档方案通过在源库建立历史表存储归档数据,配置复制规则排除历史表的删除操作,虽然会增加IO开销,但实现简单、安全性高,避免了事务过滤可能带来的风险。

推荐实践:采用历史表归档策略,新建独立schema存放历史表,便于复制规则配置。这种方法既满足了数据归档需求,又保证了复制数据的安全性和一致性,是更可靠的长期解决方案。

  • 本文作者: DarkAthena
  • 本文链接: https://www.darkathena.top/archives/GaussDB-Filtering-Out-Specified-User-s-Transactions-in-Logical-Replication
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处
http://www.dtcms.com/a/451961.html

相关文章:

  • 怎么做刷赞网站青岛网站定制开发
  • 中兴能源建设有限公司网站自己做网站可以上传软件下载
  • python 开发手机网站开发文网文许可证
  • 网站页脚包括什么wordpress 3.9 上传
  • 旅游网站建设方建设网站服务器自营方式
  • 免费网站建设市场网络营销专业培训学校
  • 网站的空间租用费wordpress js代码插件
  • wordpress怎么加速优化网站推广排名
  • 17年哪个网站做h5最好win2012服务器网站建设
  • 西安做网站的公司地址建服务网站需要多少钱
  • 网站开发区宿迁房价
  • 做纺织的都用什么网站别人做的网站百度网站验证
  • 在哪下载.net网站作品狮山建网站
  • 汕头市企业网站建设哪家好官方旗舰店
  • 国外网站如何搭建网页wordpress 用oss存储
  • 网站网页进口小城镇建设投稿网站
  • 专注律师微网站建设与律师微信营销6亚圣信息科技做网站怎么样
  • 在浴室里做的网站河南平台网站建设找哪家
  • 全国做网站公司前十名网站建设模板ppt
  • 东莞网站建设相关技术模拟建筑2022手机版
  • 网站关键词锚文本指向谷歌推广方式
  • 云建站优势网站 手机网站
  • 怎么为一个网站做外链网络营销策略研究论文
  • 仿快递网站源码一个网站做多少关键词
  • 辽宁鞍山网站建设烟台网站设计制作公司电话
  • 个人或主题网站建设 实验体会分类信息网站制作
  • 北京网站制作合肥做网站合伙怎么分
  • 做网站建设销售途径wordpress做付费内容
  • 用dede做网站去掉版权网站开发常用jquery插件
  • 怎么用视频做网站背景wordpress全站模板