OGG-MySQL无法正常同步数据问题分析

问题背景:

        用户通过OGG从源端一个MySQL从库将数据同步到目标端的另一个MySQL数据库里面,后面由于源端的从库出现了长时间的同步延时,由于延时差距过大最后选择通过重建从库方式进行了修复

从库重建之后,源端的OGG出现了报错ERROR   OGG-00146  Call to VAMInitialize returned with error status 600: VAM Client Report <CAUSE OF FAILURE : Failed to find binlog:  inside binlog index,从报错信息看很明显是源端的extract进程找不到读取的binlog文件,这是因为从库进行了重建,导致从库的binlog重新从1开始,知道问题的原因之后,用户对源端的extract抽取进行修复,将抽取进程的读取位置重新指向最新序号1的binlog进行抽取,源端的抽取进程也恢复了正常,通过stats可以看到有在正常的抽取事务,但奇怪的事,目标端的replicat应用进程一直却无法应用数据,进程状态显示为正常

问题分析:

        查看目标端应用进程r_test的状态,可以看到应用进程r_test有在正常的读取队列文件,而且没有存在应用延时的情况

        检查应用进程的日志,发现存在大量的事务被过滤的报错OGG-05664  CSN-based filtering suppressed 2 duplicate transactions, from trail Seqno 3, RBA 14043 to Seqno 3, RBA 14283. 

        最近一次的报错信息可以看到被过滤的

        第一个事务为CSN 000000000000000000001:000000000011177 and transaction ID 000000000000000000001:000000000010963,

        最后一个事务为CSN 000000000000000000001:000000000011511 and 

transaction ID 000000000000000000001:000000000011297

        注:CSN表示事务结束所在的binlog位置:000000000000000000001表示事务在binlog的序号为1,000000000011177表示事务结束的binlog位置pos

        transaction ID表示事务开始所在的binlog位置000000000000000000001表示事务在binlog的序号为1,000000000010963表示事务开始的binlog位置pos

        查看目标端检查表里面应用进程的检查点信息,可以看到当前检查点存储的低位线log_cmplt_csn为000000000000000000004:000000000003836,已经应用执行事务log_cmplt_xids为000000000000000000004:000000000003622,均超过了之前报错被过滤的事务csn以及事务xid,因此事务将被视作已经完成执行从而被跳过,这也为什么应用进程看起来读取队列正常,但一直没有应用事务的原因,因为应用的事务csn,xid都低于检查表里面的检查点csn以及事务XID

        那为什么检查表里面的检查点信息都这么大呢,从000000000000000000004序号我们可以判断,检查点已经读取到了属于binlog为4的事务,很明显这是重搭从库之前应用进程的检查点信息,因为从库的binlog已经重新从1开始,所以检查表的信息应该也需要被重新清理,确保检查点也从binlog 1重新开始

问题解决:

        我们先要清理检查表里面链路的信息,这里直接根据应用的进程名称删除检查表信息,辅助的检查表checkpoint_lox记录为空不需要进行操作,另一种方式直接删除应用进程delete replicat重建也可以清空检查表进程的信息 

mysql> delete from checkpoint where group_name='R_TEST';

        修改进程r_test读取队列文件的位置,指向最近一个的队列文件3,再重新应用一遍队列文件,由于修改的队列文件位置不一定准确,可能出现重复应用数据的情况,可以通过参数HANDLECOLLISIONS去解决冲突数据

GGSCI (rac2) 20> alter replicat r_test,extseqno 3,extrba 0 

        重新开启应用进程,发现依然出现事务被过滤的报错OGG-05664  CSN-based filtering suppressed 15 duplicate transactions

问题二次分析:

        再次查看检查表的信息,发现进程R_TEST的检查点又重新回到了之前的CSN位置000000000000000000004:000000000003836,不是期待的binlog为1的日志

        通过logdump分析队列文件3日志,首先尝试根据filter ggstoken TRANID过滤检查点里面记录的事务ID000000000000000000004:000000000003836,发现队列文件记录了从库重建之前的binlog 4的事务信息

        之后再往下查找又发现了属于从库重建之后binlog日志序列号1的事务信息000000000000000000001:000000000005280

        也就是说队列文件3同时记录了从库重建之前binlog 4的事务以及重建之后binlog 1的事务,这样如果应用进程从队列文件头开始读取的话,会先应用重建之前binlog 4的事务,检查点里面的信息会更新为binlog 4的事务检查点信息,这样后面再读取到重建之后binlog 1的事务信息时,由于binlog 1事务的csn,xid均低于binlog 4事务的csn,xid,就会导致binlog 1事务都被过滤

最终解决:

        知道问题原因是由于队列文件里面同时包含从库重建之前binlog 4的事务以及重建之后binlog 1的事务之后,我们需要获取更为准确的读取rba位置,让应用进程跳过从库重建之前binlog 4的事务应用

        通过logdump确认第一个属于binlog 1的事务的位置rba 4421

        清理检查表里面链路的信息,这里我直接根据应用的进程名称删除检查表信息,辅助的检查表checkpoint_lox记录为空不需要进行操作,另一种方式直接删除应用进程delete replicat重建也可以清空检查表进程的信息 

mysql> delete from checkpoint where group_name='R_TEST';

        修改进程r_test读取队列文件的位置,指向队列文件3,rba 4421

GGSCI (rac2) 20> alter replicat r_test,extseqno 3,extrba 4421 

        注:如果知道重建从库的时间点,也可以通过修改应用进程的开始事务的时间点启动,跳过重建之前的事务,这种方式更加便捷

ALTER REPLICAT xxxx, BEGIN 2017-01-07 08:00:00 

        重新开启应用进程同步终于恢复正常,没有再出现事务被过滤的报错,

        检查表的信息也更新为binlog 1的事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Sneaky DogeRAT特洛伊木马病毒网络攻击的动态情报

一、基本内容 作为复杂恶意软件活动的一部分&#xff0c;一种名为DogeRAT的新开源远程访问特洛伊木马&#xff08;RAT&#xff09;主要针对位于印度的安卓用户发动了网络安全攻击。该恶意软件通过分享Opera Mini、OpenAI ChatGOT以及YouTube、Netfilx和Instagram的高级版本等合…

《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

饥荒Mod 开发(二三):显示物品栏详细信息

饥荒Mod 开发(二二)&#xff1a;显示物品信息 源码 前一篇介绍了如何获取 鼠标悬浮物品的信息&#xff0c;这一片介绍如何获取 物品栏的详细信息。 拦截 inventorybar 和 itemtile等设置字符串方法 在modmain.lua 文件中放入下面代码即可实现鼠标悬浮到 物品栏显示物品详细信…

适合引流源码声音鉴定神器网站源码,轻松吸引用户关注

源码介绍 声鉴卡HTML5网页源码&#xff0c;完整可运转&#xff0c;调用wx录音&#xff0c;自动判断声音属性&#xff0c;输出结果 安装教程 只需要把源码上传至主机空间就可以 支持上传二级目录访问&#xff01;提示一下&#xff1a;wxvx打开效果是最佳的源码里面生成二维码…

测试服务器带宽(ubuntu)

apt install python3 python3-pippip3 install speedtest-clispeestest-cli

Hive05_DML 操作

1 DML 数据操作 1.1 数据导入 1.1.1 向表中装载数据&#xff08;Load&#xff09; 1&#xff09;语法 hive> load data [local] inpath 数据的 path [overwrite] into table student [partition (partcol1val1,…)];&#xff08;1&#xff09;load data:表示加载数据 &…

Redis数据结构(常用5+4种特殊数据类型)

1、Redis 数据类型以及使用场景分别是什么&#xff1f; Redis 提供了丰富的数据类型&#xff0c;常见的有五种数据类型&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff…

119. 杨辉三角 II(Java)

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

通过自然语言处理增强推荐系统:协同方法

一、介绍 自然语言处理 (NLP) 是人工智能的一个分支&#xff0c;专注于使机器能够以有意义且有用的方式理解、解释和响应人类语言。它包含一系列技术&#xff0c;包括情感分析、语言翻译和聊天机器人。 另一方面&#xff0c;推荐系统&#xff08;RecSys&#xff09;是旨在向用户…

Android笔记(二十一):Room组件实现Android应用的持久化处理

一、Room组件概述 Room是Android JetPack架构组件之一&#xff0c;是一个持久处理的库。Room提供了在SQLite数据库上提供抽象层&#xff0c;使之实现数据访问。 &#xff08;1&#xff09;实体类&#xff08;Entity&#xff09;&#xff1a;映射并封装了数据库对应的数据表中…

彻底卸载Keil4

彻底卸载Keil4 双击 然后回到该软件的文件夹位置&#xff0c;把该文件夹删除即可&#xff0c;然后清一下回收站。

【Midjourney】Midjourney提示词格式详解

目录 &#x1f347;&#x1f347;Midjourney是什么&#xff1f; &#x1f349;&#x1f349;Midjourney怎么用&#xff1f; &#x1f514;&#x1f514;Midjourney提示词格式 &#x1f341; 1.模型版本提示词&#x1f341; 参数 参数详解 应用示例 &#x1f343; 2.风格…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于双闭环PI的SMO无速度控制系统simulink建模与仿真&#xff0c;基于双闭环PI的SMO无速度控制系统主要由两个闭环组成&#xff1a;一个是电流环&#xff0c;另一个是速度环。…

AssertionError: The environment must specify an action space. 报错 引发的惨案

起因是&#xff1a;从github上下载了一个代码&#xff0c;运行出错。 整体流程&#xff1a; 1. AssertionError: The environment must specify an action space. 报错&#xff0c;解决方案是 降级gym到 gym0.18.0 2.为了降级gym gym0.18.0 报错&#xff0c;发现需要降级 setup…

k8s实战之ELK日志管理

首先查看总体流程 首先创建namespace apiVersion: v1 kind: Namespace metadata:name: kube-logging 一、首先创建es.yaml --- apiVersion: v1 #kubernetes API版本,采用最新版本v1 kind: Service #资源类型定义为Service metadata: name: elasticsearch-logging # …

vue3 全局配置Axios实例

目录 前言 配置Axios实例 页面使用 总结 前言 Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。它提供了一种简单、一致的 API 来处理HTTP请求&#xff0c;支持请求和响应的拦截、转换、取消请求等功能。关于它的作用&#xff1a; 发起 HTTP …

音视频技术开发周刊 | 325

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 AI读心术震撼登顶会&#xff01;模型翻译脑电波&#xff0c;人类思想被投屏&#xff5c;NeurIPS 2023 在最近举办的NeurIPS大会上&#xff0c;研究人员展示了当代AI更震撼…

CMakeLists.txt

源码结构 生成可执行程序 # CMake最小版本号 cmake_minimum_required(VERSION 3.15.0)#增加-stdc11 set(CMAKE_CXX_STANDARD 11)#设置工程名称 project(calculate)#[[ #方法一&#xff1a;添加源码文件 #aux_source_directory(< dir > < variable >) #dir&#xf…

Python能做大项目(7) - Poetry: 项目管理的诗和远方之二

依赖管理 实现依赖管理的意义 我们已经通过大量的例子说明了依赖管理的作用。总结起来&#xff0c;依赖管理不仅要检查项目中声明的直接依赖之间的冲突&#xff0c;还要检查它们各自的传递依赖之间的彼此兼容性。 Poetry 进行依赖管理的相关命令 在 Poetry 管理的工程中&am…

基于电商场景的高并发RocketMQ实战-Commitlog基于内存的高并发写入优化、基于JVM offheap的内存读写分离机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…