包拯断案 | 数据库从库GTID在变化 为何没有数据写入@还故障一个真相

提问:作为DBA运维的你是否遇到过这些烦恼

1、数据库从库复制链路如何正确配置表过滤信息?

2、数据库从库的GTID在变化,实际却没有数据写入,究竟是什么原因?

心中有章,遇事不慌

作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是

无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~

#包拯秘籍#

一整套故障排错及应对策略送给你,让你像包拯一样断案如神:

#首先

遇到此类问题后,我们要做到心中有章(章程),遇事不慌。一定要冷静,仔细了解故障现象

(与研发/用户仔细沟通其反馈的问题,了解故障现象、操作流程、数据库架构等信息)

#其次

我们要根据故障现象进行初步分析。心中要想:是什么原因导致数据库从库里没有数据写入?

例如:是复制链路的状态出现问题了,还是配置的表过滤信息出错了?

#然后

针对上述思考,我们需要逐步验证并排除,确定问题排查方向。

#接着

确定了问题方向,进行具体分析。通过现象得出部分结论,通过部分结论继续排查并论证。

#最后

针对问题有了具体分析后,再进行线下复现,最终梳理故障报告。

真刀实战,我们能赢

说了这么多理论,想必实战更让你心动。那我们就拿一个真实案例进行分析——某运营商业务系统部署了

一套多源复制的数据库架构,DBA发现:从库主机异常重启、启动复制后,GTID在变化但是并没有数据写入,

究竟是什么原因?

01故障发生场景

在项目现场兢兢业业进行数据库部署的你,突然收到告警:一套部署多源复制的数据库架构中,

数据库从库所在主机发生异常重启后,手动拉起复制链路,一段时间后客户反馈从库数据没变化,

数据最近更新的时间是主机重启前。经查看,发现复制链路状态正常且配置的表过滤信息都显示正常,

从库GTID在变化,但就是没有数据写入从库,DBA心中疑惑不已,立马着手排查。

02故障排查分析

1)收到告警后,DBA登录数据库后台检查主从复制状态,发现复制状态正常
在这里插入图片描述

2)检查从库每个复制通道中配置的表过滤信息,配置也显示正常
在这里插入图片描述

3)检查从库errorlog,发现日志里没有显示异常信息

4)检查从库relaylog,发现relaylog中的事务不是空事务

5)检查从库binlog,解析后发现从库binlog日志中所有事务都是空事务,只包含了begin和commit操作。
在这里插入图片描述

由此怀疑,是应用relaylog时配置的表过滤没有生效导致的。由于无法在本地复现该问题,DBA无法确定具体

原因,因此求助研发团队。经研发团队查看代码并调试后发现,问题出在配置文件中的replicate-wild-do-table

参数设置上,此前DBA将表过滤配置持久化到配置文件上了,因该参数获取的表名存在问题,导致数据未能正

确应用到从库中。为解决这个问题,DBA在对replicate-wild-do-table参数进行正确设置后,数据同步恢复正常。

03问题复现

通过研发同事代码调试,发现配置文件中持久化的参数有问题。例如参数设置为

【replicate-wild-do-table=tongdao2:test2.t1,test2.t2】。

GreatDB启动时,每一行作为一个条件,此时对于tongdao2而言,配置replicate-wild-do-table的

结果是:db=test2,table_name=t1,test2.t2,这样写会将 t1,test2.t2 当作一个表,不满足条件。

因此,同步过程中,table_name=t1,test2.t2 找不到,导致所有事务全部转化为空事务,

也就查询不到数据了。

源代码如下:
在这里插入图片描述

解析参数时,只查找了冒号为channel和table的分隔符,没在table之间去检查逗号的逻辑。

04故障解决方案

(1)将replicate-wild-do-table持久化到配置文件时:

采用多源复制时,为避免上述问题,可采用如下配置:同一通道下每张表单独配置一行,

例如:test2.t1,test2.t2 表;

例如:
replicate-wild-do-table=tongdao1:test1.t1
replicate-wild-do-table=tongdao2:test2.t1
replicate-wild-do-table=tongdao2:test2.t2

(2)不将replicate-wild-do-table持久化到配置文件时:

如果不将此参数持久化到配置文件,应在实例重启后重新执行 CHANGE REPLICATION FILTER命令

配置表过滤条件,确保配置及时生效,例如:

greatdb> CHANGE REPLICATION FILTER
Replicate_Wild_Do_Table=(‘test2.t1’,‘test2.t2’) for channel ‘tongdao2’;

复盘总结

1.故障主要原因

此次故障导致的主要原因是 replicate-wild-do-table 参数未正确配置,导致表过滤条件不生效,

将应用的所有事务转化为空事务。

2.重视故障测试

在一套新的业务系统后完成数据库架构搭建后,应进行故障测试,包括模拟数据库从库异常重启、

复制链路重建等情况,以验证配置的稳定性和可靠性,提前规避相关故障发生。

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

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

相关文章

如何构建短视频矩阵?云微客开启多账号协同作战

你有没有疑惑过,为什么有些账号每一次发布视频,都要艾特一下其他账号呢?那些被艾特的账号,你有点进去关注过吗?其实做过运营的都或多或少的接触过矩阵,短视频矩阵的玩法现在也逐步成为了趋势。企业通过多账…

GitHub Copilot Issue in Visual Studio Code “Status Ready (disabled)“

I’m facing an issue with GitHub Copilot in Visual Studio Code, where it’s not suggesting any code. Even though it says “enabled globally” in the extensions tab settings, the icon in the status bar has a diagonal line through it. When I click on the ico…

pyautogui进行点击失效,pyautogui.click()失效

背景:在Pycharm里,使用pythonpyautogui调用 .exe程序文件时候,当程序界面出来之后,鼠标失去反应,用pyautogui进行点击。后面尝试使用图片相似也无法实行点击。 解决方法:运行Pycharm或者其他ide的时候选择…

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存?添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…

极市开发平台yolov8训练无人机数据集样例数据流程

先进入vscode,进入src_repo文件夹。 第一步,克隆一个比较好的博主的库: GitHub - Incalos/YOLO-Datasets-And-Training-Methods: This project involves making custom datasets for the YOLO series and model training methods for YOLO.…

【openwrt-21.02】T750 openwrt-21.02 pptp拨号失败问题分析及解决方案

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

关于蓝屏查看日志分析原因

一、前提 虽然电脑经常蓝屏,或者发生了蓝屏现象,但是仍然可以进入系统,并且可以进行桌面操作。 二、查看蓝屏日志 1.按下win键,搜索计算机管理。 2.依次点击:系统工具->事件查看器->Windows日志->系统 3.在…

Qt-桌面服务和托盘

t应用程序在用户的桌面环境中表现良好,但某些集成需要额外的,有时是特定于平台的技术。 Qt中的各种类旨在帮助开发人员将应用程序集成到用户的桌面环境中。这些类使开发人员能够在使用跨平台API的同时利用原生服务。 QDesktopServices 访问常用桌面服务的…

Java环境搭建指南:从新手到专家的全方位教程!

Java是一种广泛使用的编程语言,具有跨平台的特性,这意味着只要一次编写,就可以在支持Java的任何系统上运行,无论是Windows、Mac OS还是Linux。要开始使用Java进行开发,首先需要搭建Java开发环境,这包括下载…

【项目二】C++高性能服务器开发——日志系统(日志器,日志级别,日志事件)

知识点备忘录 其实也没啥 操作记录 在乌邦图上写的,先是模仿sylar创建了目录 进入sylar文件夹,有今天写的log.h头文件 其中log_test.cpp是为了测试log.h能否正常运行建的,只是个测试文件 log.h写了三个类,日志级别&#xff0…

PHP一站式解决方案高级房产系统小程序源码

一站式解决方案,高级房产系统让房产管理更轻松 🏠【开篇:告别繁琐,迎接高效房产管理新时代】🏠 你是否还在为房产管理的繁琐流程而头疼?从房源录入、客户咨询到合同签订、售后服务,每一个环节…

计算机网络11——数据库语法2

目录 1、变量 (1)局部变量 (2)会话变量 (3)系统变量 2、判断选择 (1)if选择语法 (2)case选择 3、循环 (1)while循环 (2)其他循环 4、存储过程 5、触发器 6、事务:transaction 事务的特性 使用 1、变量 (1)局部变量 函数里面定义的,变量名 …

【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提

2024年国赛C题第二套解题思路 第一问:2024~2030年农作物的最优种植方案 【问题分析】 题目要求为某乡村在2024~2030年制定农作物的最优种植方案,目的是最大化收益,并需考虑两种销售情况: 1. 超过预期销售量的部分滞销&#xff0…

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from pinia export const useCommonStore defineStore(pack-store, {state: (): State > ({wwInfo: {},globalData: {},timerLock: false, //是…

【LeetCode】05.最长回文子串

题目要求 解题思路 这一类型(回文子串)主要有两种解决方法,一种是动态规划,另一种是中心拓展算法。 动态规划: 本质问题就是在i-j区间是不是回文的。这样的话我们在 i 和 j 位置的值相等时,判断如下三种情…

SQL-多表查询

1、多表关系 一对多、多对一:在多的一方建立外键,指向一的一方。 多对多:至少两个外键,通过中间表维护。 一对一 2、多表查询概述 3、内连接 4、外连接 5、自连接 6、联合查询 7、子查询 8、多表查询案例 # 1、多表关系 #…

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码,以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…

linux 内核代码学习(八)

总体目标:由于fedora10 linux发行版中自带的linux2.6.xx内核源码规模太庞大了,对于想通读内核源码的爱好者来说太困难了,因此选择了linux2.4.20内核来进行测试(最终是希望能够实现linux1.0内核的源码完全编译和测试)。…

Rust的数据类型

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 3.5 数据类型的定义和分类 在Rust…

C语言关键字用法实例详解——const(三)

C语言 文章目录 C语言前言一、const二、const和指针const int *p1 或 int const *p1int *const p2 三、函数参数总结 前言 这篇文章来看一看const关键字 一、const 有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。 例如…