当前位置: 首页 > 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采集数据库的多…...

Linux驱动——uart子系统驱动注册分析

韦东山驱动大全uart子系统笔记自整理——08_UART驱动情景分析_注册由于韦东山老师uart子系统的08注册情景分析的笔记很简略,所以在学完这节课后自己整理了一份详细笔记,包含TTY驱动框架,数据结构分析,以及注册过程分析&#xff0c…...

160+实用功能:OneMore插件如何让OneNote笔记管理效率翻倍?[特殊字符]

160实用功能:OneMore插件如何让OneNote笔记管理效率翻倍?🚀 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为OneNote单调的功…...

3D打印模型优化实战:从问题诊断到高效输出的完整指南

3D打印模型优化实战:从问题诊断到高效输出的完整指南 【免费下载链接】BlenderUSDZ Simple USDZ file exporter plugin for Blender3D 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderUSDZ 1. 痛点定位:3D打印模型导出的四大核心障碍 诊断…...

DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南

DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印…...

用TurtleBot3实测:Navigation2局部代价地图的滚动窗口为何必须用odom坐标系?

TurtleBot3实测:为什么Navigation2局部代价地图必须绑定odom坐标系? 当你在Gazebo中第一次看到TurtleBot3的导航表现时,可能会对局部代价地图(Local Costmap)的坐标系选择产生疑问。为什么这个实时更新的避障地图要绑定…...

Alibaba DASD-4B Thinking 入门:卷积神经网络(CNN)原理交互式学习与答疑

Alibaba DASD-4B Thinking 入门:卷积神经网络(CNN)原理交互式学习与答疑 你是不是觉得卷积神经网络听起来就很高深,那些卷积核、池化、感受野的概念,光看文字解释就头大?别担心,这几乎是每个初…...

OpenClaw智能邮件助手:nanobot镜像自动分类与回复重要邮件

OpenClaw智能邮件助手:nanobot镜像自动分类与回复重要邮件 1. 为什么需要智能邮件助手 每天早晨打开邮箱,看到堆积如山的未读邮件总是让人头疼。重要客户的询盘可能被埋没在促销广告中,紧急的协作请求可能因为延迟回复而影响项目进度。作为…...

DoL-Lyra整合包完整使用指南:5分钟掌握汉化版Degrees of Lewdity一键安装

DoL-Lyra整合包完整使用指南:5分钟掌握汉化版Degrees of Lewdity一键安装 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DoL-Lyra整合包为Degrees of Lewdity玩家提供了一站式解决方案&…...

【嵌入式Linux】Libmodbus RTU从源码到实战:基于i.MX6UL的工业通信移植指南

1. 为什么选择Libmodbus RTU在i.MX6UL上做工业通信? 在工业自动化领域,Modbus协议就像设备之间的"普通话",而RTU模式则是其中最省流量、最抗干扰的方言。我去年给一家工厂做设备改造时,发现他们的老式PLC和传感器清一色…...

基于PSO算法的海陆空多栖无人机路径规划探索

PSO算法,空中机器人路径规划,无人机路径规划 海陆空多栖环境路径规划,考虑海洋和大气中的能源消耗不同,还原环境特性,粒子群PSO算法在如今科技飞速发展的时代,无人机的应用场景越发广泛,从简单的…...