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

MySQL 两个备机同时挂掉故障分析

来源:

接报线上出现两个5.7.38的备库同时crash,crash堆栈相同,内容如下:

stack_bottom = 7fd7700b0d30 thread_stack 0x40000
/home/service/app/mysql33066/bin/mysqld(my_print_stacktrace+0x2c)[0xf1062c]
/home/service/app/mysql33066/bin/mysqld(handle_fatal_signal+0x4f5)[0xd4f155]
/lib64/libpthread.so.0(+0xf5d0)[0x7fdbc8c2f5d0]
/lib64/libc.so.6(gsignal+0x37)[0x7fdbc73662c7]
/lib64/libc.so.6(abort+0x148)[0x7fdbc73679b8]
/home/service/app/mysql33066/bin/mysqld[0x7828ae]
/home/service/app/mysql33066/bin/mysqld(_Z27row_ins_sec_index_entry_lowmmP12dict_index_tP16mem_block_info_tS2_P8dtuple_tmP9que_thr_tb+0x187b)[0x108e5bb]
/home/service/app/mysql33066/bin/mysqld(_Z23row_ins_sec_index_entryP12dict_index_tP8dtuple_tP9que_thr_tb+0x13a)[0x109271a]
/home/service/app/mysql33066/bin/mysqld(_Z12row_ins_stepP9que_thr_t+0x2c4)[0x1094e44]
/home/service/app/mysql33066/bin/mysqld[0x10a7d6b]
/home/service/app/mysql33066/bin/mysqld(_ZN11ha_innobase9write_rowEPh+0x214)[0xfb69e4]
/home/service/app/mysql33066/bin/mysqld(_ZN7handler12ha_write_rowEPh+0x11a)[0x7bd6aa]
/home/service/app/mysql33066/bin/mysqld(_ZN20Write_rows_log_event9write_rowEPK14Relay_log_infob+0x12d)[0xe8d19d]
/home/service/app/mysql33066/bin/mysqld(_ZN20Write_rows_log_event11do_exec_rowEPK14Relay_log_info+0x19)[0xe8d509]
/home/service/app/mysql33066/bin/mysqld(_ZN14Rows_log_event12do_apply_rowEPK14Relay_log_info+0x26)[0xe76316]
/home/service/app/mysql33066/bin/mysqld(_ZN14Rows_log_event14do_apply_eventEPK14Relay_log_info+0x446)[0xe8b156]
/home/service/app/mysql33066/bin/mysqld(_Z27slave_worker_exec_job_groupP12Slave_workerP14Relay_log_info+0x17f)[0xee71ef]
/home/service/app/mysql33066/bin/mysqld(handle_slave_worker+0x433)[0xec94f3]
/home/service/app/mysql33066/bin/mysqld(pfs_spawn_thread+0x1b4)[0xf27ef4]
/lib64/libpthread.so.0(+0x7dd5)[0x7fdbc8c27dd5]
/lib64/libc.so.6(clone+0x6d)[0x7fdbc742e02d]

这个crash堆栈可以看到,是在回放binlog时,出现了crash。这类问题比较常见,看到堆栈能确定大概原因:物理备份时拷贝文件有损坏。一般此类问题直接重新用最新冷备文件重建解决即可,但这次的现象有两个不同,一是两个备库都运行了10多天了,二是从堆栈上看应该是索引的问题,可以尝试修复。

分析:

既然是会crash,那么首先应该确定是哪个binlog事务回放导致crash,进入定位到是执行哪个sql,然后再确定是哪个表。

  1. 在my.cnf中增加停止复制参数:skip-slave-start

  2. 使用show slave status 和show master status确定当前同步到的位点,如果曾经同步过的主机多,需要登陆master确定当前的master uuid。

  3. 通过上面找到的binlog位置,在备机relay-log中找到执行会导致crash的事务,发现是一个insert语句。

  4. 接下来要验复现定crash,直接select count(*)这个表,扫一下表数据,一般数据文件损坏的会直接crash,但本次案例没有crash,这说明表数据没问题。通过show create table查看表结构,发现该还有一个联合唯一索引,当我们通过主键扫表时,不会调用辅助索引,但插入或者更新时,一定会同步更新索引。

  5. 继续验证索引问题,因为表数据不大,又是没流量的备库,可直接重建索引测试:

    SET sql_log_bin = 0;
    ALTER TABLE desc_table ENGINE=InnoDB;
    SET sql_log_bin = 1;
    START SLAVE;

观察每次必crash的binlog顺利通过,修复成功,以相同方法修复另一台,至此完全确定就是索引文件损坏。

6. 去掉my.cnf中skip-slave-start,否则下次有问题重启之后不会启动复制。

其它补充:

为什么这次是可修复的?

备库运行时间长,数据整体上不会有大面积问题。这是索引问题,重建索引会直接drop掉索引,不会访问索引内容,不会导致crash,如果是表文件没办法直接重建修复。

为什么数据文件损坏会导致数据库crash?

数据库存储在硬盘的数据文件,实际上是将内存中数据直接以页面为单位写盘,加载时也是直接将页面加载到内存中访问,页面里除了数据外,还有大量的相对指针偏移数据,访问页面内数据时依赖相对偏移指针来找目标内容,当页面数据损坏时,指针偏移的目标位置很容易访问到非法内存,导致进程crash。对此类问题,通过debug或core文件方式来分析源码意义不大,直接重建修复即可。

为什么数据文件会有损坏?

目前,MySQL的备份方式数据有两大类,一是逻辑方式备份,直接登陆数据库select数据保存。二是物理方式备份,通过xtraBackup直接拷贝物理文件,先拷redo,再拷数据文件,恢复时先拷数据文件,然后再按页面应用redo日志,我们用的就是第二种,几乎所有的公有云都是用第二种,它备份恢复速度是逻辑方式的5~10倍。

xtraBackup是第三方公司percona开发的开源工具,备份时不侵入MySQL,直接拷文件,可能在某些场景下有缺陷,备份备份文件损坏现象,但这个概率不高(每天备份上万次,几个月出现一次问题),在可承受范围,并且该工具一直在不停迭代升级,因此业界一直用它来做备份恢复。

 

相关文章:

MySQL 两个备机同时挂掉故障分析

来源: 接报线上出现两个5.7.38的备库同时crash,crash堆栈相同,内容如下: stack_bottom 7fd7700b0d30 thread_stack 0x40000 /home/service/app/mysql33066/bin/mysqld(my_print_stacktrace0x2c)[0xf1062c] /home/service/app/m…...

序列化与反序列化深入理解

序列化与反序列化深入理解 1 介绍1.1 概述1.2 序列化实现的需求 2 常用序列化实现函数序列化语言内置开源序列化实现 3 各序列化实现比较4 各序列化实现概述XMLJSONProtobufJava 内置TLVVLE(Variable Length Encoding) 5 flex & bison5.1 介绍应用解…...

hudi系列-小文件优化

hudi使用mvcc来实现数据的读写一致性和并发控制,基于timeline实现对事务和表服务的管理,会产生大量比较小的数据文件和元数据文件。大量小文件会对存储和查询性能产生不利影响,包括增加文件系统的开销、文件管理的复杂性以及查询性能的下降。对于namenode而言,当整个集群中…...

mysql 是否包含 返回索引 截取字符串

是否包含返回索引 原文链接:https://www.cnblogs.com/shoshana-kong/p/16474175.html 方法1:使用通配符%。 通配符也就是模糊匹配,可以分为前导模糊查询、后导模糊查询和全导匹配查询,适用于查询某个字符串中是否包含另一个模糊…...

【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵(中等) 方法一:二分查找 思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是升序的 因此我们可以使用两次二分来定位到目标位置。 第一次二分: 从第 0 列中的「所有行」开始找&#x…...

Nginx rewrite

一.location 大致可以分为三类: 精准匹配:location / {…}一般匹配:location / {…}正则匹配:location ~ / {…} 1.location 常用的匹配规则: :进行普通字符精确匹配,也就是完全匹配。^~ &am…...

【数据分享】1929-2022年全球站点的逐日降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 有关气象指标的监测站点数据,之前我们分享过1929-2022年全…...

【论文阅读】(2013)Exact algorithms for the bin packing problem with fragile objects

文章目录 一、摘要二、介绍三、之前在这个问题上的工作四、易碎物品背包问题的求解4.1 ILP模型4.2 基于KP01的方法4.3 动态规划 五、二元分支方案5.1 分支方案1(基于决策变量的分支)5.2 分支方案2(基于yj和xji的分支)5.3 将L2嵌入…...

K8S YAML 部署XXLJOB 集群

apiVersion: apps/v1 kind: Deployment metadata: labels: app: xxl-job-admin name: xxl-job-admin namespace: ccetest #根据情况修改namespace spec: replicas: 3 #根据情况修改副本数 selector: matchLabels: app: xxl-job-admin strat…...

Linux防火墙学习笔记3

iptables链的概念: 当客户端访问服务器端的Web服务的时候,客户端发送请求报文到网卡,而TCP/IP协议栈是属于内核的一部分。客户端的请求报文会通过内核的TCP协议传输到用户空间的Web服务,而客户端报文的目的地址为Web服务器所监听的…...

数仓用户行为数据分析

分层优点:复杂的东西可以简单化、解耦(屏蔽层作用)、提高复用、方便管理 SA 贴源 数据组织结构与源系统保持一致 shm 历史层 针对不同特征的数据做不同算法,目的都是为了得到一份完整的数据 PDM 明细层 做最细粒度的数据明细…...

RK3288 Android5.1添加WiFiBT模块AP6212

CPU:RK3288 系统:Android 5.1 注:RK3288系统,目前 Android 5.0 Kernel 3.10 SDK 支持 Braodcom,Realtek 等 WiFi BT 模块 各个 WiFi BT 模块已经做到动态兼容,Android 上层不再需要像以前一样进 行特定宏的配置 此…...

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展,API变的至关重要。根据统计,目前市面上有上千万的开发者,互联网项目超过10亿,保守统计涉及的 API 数量大约有 100 亿。这么大基数的API,只要解决某些共有的痛点,将会是非常有意义的事情。…...

chatgpt生成【2023高考作文】北京卷二 - 亮相

舞台上,戏曲演员有登场亮相的瞬间。生活中也有许多亮相时刻:国旗下的讲话,研学成果的汇报,新产品的发布……每一次亮相,都受到众人关注;每一次亮相,也会有一段故事。 请以“亮相”为题目&#x…...

实验四、shell编程

一、实验目的 1.了解shell的特点和主要种类。 2.掌握 shel1 脚本的建立和执行方式。 3.掌握bash的基本语法。 4.学会编写shell 脚本。 二、实验内容 shell 脚本的建立和执行。历史命令和别名定义。shell变量和位置参数、环境变量。bash的特殊字符。一般控制结构。算术运算及…...

【代码随想录】刷题Day51

1.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 1.dp数组的含义:dp[i][0]为第i天卖出股票的最大价值;dp[i][1]为第i天持有股票的最大价值 2.dp数组的条件:由于有冷冻期,所以dp数组的条件就变了。第i天卖出股票的最大…...

centos7下svnserve方式部署subversion/SVN服务端(实操)

一般来说,subversion服务器可以用两种方式架设: 一种是基于svnserve,svnserve作为服务端; 一种是基于Apache,用apache作为服务端。 这里采用第一种方式部署。 执行如下命令,安装SVN。 yum install sub…...

一款红队批量脆弱点搜集工具

功能 指纹识别:调用“三米前有香蕉皮“前辈工具,他的工具比finger好用 寻找资产中404,403,以及网页中存在的其他薄弱点,以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 使用 第一次使用脚本请运行p…...

Docker 基本管理

一、Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵守了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自…...

Debezium系列之:把多张表的数据分发到同一个Kafka Topic,同一张表的数据始终进入Topic相同分区

Debezium系列之:把多张表的数据分发到同一个Kafka Topic,同一张表的数据始终进入Topic相同分区 一、需求背景二、实现思路三、核心参数和参数详解四、创建相关表五、提交Debezium Connector六、插入数据七、消费Kafka Topic八、总结和延展一、需求背景 debezium采集数据库的多…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

【生成模型】视频生成论文调研

工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...