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

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

数据链路层的主要功能是什么

数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...