MySQL备份问题排查和思考(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL备份问题排查和思考(一)
  • 1. 背景
  • 2. 疑点
  • 3. 问题分析
  • 4. 问题定位
  • 5. checking permissions的疑惑
  • 6. 探索优化思路
  • 7. 补充:关于几个timeout参数生效点


1. 背景

行内数据库备份在使用某备份软件,使用的数据库版本MySQL 8.0社区版,全备使用mysqldump进行,DBA早上巡检发现有一套数据库全备份失败,心里一疙瘩怎么回事呢?来看看如下报错


[mysqldump: Error: 'Lost connection to MySQL server during query' when trying to dump tablespaces mysqldump: couldn't execute 'SHOW VARIABLES LIKE 'ndbinfo'\_version' MySQL server has gone away (2006)]


肯定有同学有疑问?

  • 为什么mysqldump会出现丢失连接?
  • 为什么不使用xtrabackup呢?这需要另外章节来阐述了。


2. 疑点


为什么mysqldump会出现丢失连接?带着该问题进行以下分析:

  • 1.检查备份软件工具负载情况
  • 2.检查数据库中错误日志
  • 3.数据库的负载情况

3. 问题分析


3.1 备份软件是否存在高负载、排队或超时配置导致响应超时?

对整个备份系统进行排查,虽然备份系统任务多,但并没有出现性能瓶颈导致数据库备份时超时,备份软件也没有设置备份超时时间自动断开的相关配置

3.2 检查数据库错误日志


2020-10-26T01:31:14.465387+08:00 149718 [Note] [MY-010914] [Server] Aborted connection 149718 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets).


通过数据库错误日志发现同备份软件报错一样,对于这个错误,MOS上有一个比较好的解释如下:


屏幕快照 2021-11-19 下午3.26.22.png


不管怎么样我们后面先来看备份软件触发了些什么语句。

3.3 检查数据库负载情况,备份期间cpu、io均比较正常


屏幕快照 2021-11-19 下午3.26.43.png



4. 问题定位


从上述检查来看,报错处是Got an error reading而不是timeout,关于timeout的触发方式我们最后总结。首先从备份软件架构,备份软件在数据库中部署agent,所以连接属于交互式连接受到参数interactive_timeout的影响,那么为什么导致的超时丢失连接的呢?我们可以进行问题复现,使用备份软件对数据库发起重新备份,对数据库进行监控


4.1 通过备份软件发起备份,可以看到会发起4个本地备份连接,3个处于sleep状态,一个线程处于执行状态下,如下:

屏幕快照 2021-11-19 下午3.27.20.png


SQL语句:

  SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('xxx'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME



注意这里的状态为checking permissions,并且这个语句长期处于这个状态。我们以前理解的这个就是在鉴权,我们一般的认知是下面一些顺序:

  • starting:lex+yacc 语法语义解析,得到解析树
  • checking permissions:根据解析后的解析树,对需要访问的表进行鉴权
  • opening tables:打开访问的表,建立内部访问表的属性(表和字段信息),建立好和Innodb的关联,同时加上表锁(MDL LOCK)
  • optimizing/statistics/preparing:这3个状态处于语句的物理和逻辑优化阶段,之后建立好执行计划
  • Sending data( 8.0为executing):select语句MySQL层和Innodb层进行数据交互,遇到这个状态通常考虑语句是否足够优化
  • Update:同上insert语句,如果遇到行锁会处于这个状态下。
  • Updating:同上delete/update语句,如果遇到行锁会处于这个状态下。
  • query end(waiting for handler commit 8.0):语句的提交过程包含在这个状态下,遇到这个问题,主要考虑是否大事务的存在。
  • closing tables:和opening tables对应,释放表的内部访问版本放入缓存共下次使用,同时也包含语句的错误回滚也在这个状态下
  • freeing items:释放解析树

我们能够看到,鉴权实际上在比较靠前的位置,是不是说这里语句还没真正的开始执行呢?我们先放一放。



4.2 通过执行show processlist发现上述SQL一直处于运行状态,于是终止备份,手工运行该SQL

屏幕快照 2021-11-19 下午3.27.59.png

由此可以推测发现,备份软件在发起备份时会发起4个连接,而其中一个连接执行SQL比较久,而另外3个sleep连接在超过interactive_timeout后断开,导致agent整体退出关闭所有的数据库连接,执行的SQL也终止,所以报错Got an error reading。但是奇怪的是我们在日志并没有找到Got timeout reading communication packets的日志。



            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
缓存 Ubuntu Linux
WSL2(4) Ubuntu中无法使用snap解决办法
WSL2(4) Ubuntu中无法使用snap解决办法
998 0
|
网络协议 MySQL 关系型数据库
|
12月前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
588 4
|
存储 安全 芯片
封装之打线简介
介绍封装打线的原理,常用材料的优缺点,关键部件,wire bonding 过程,主要参数,线形,线长和主要测试方法。
13393 3
封装之打线简介
|
机器学习/深度学习 算法 开发者
回归模型的显著性检验-1| 学习笔记
快速学习回归模型的显著性检验-1。
回归模型的显著性检验-1| 学习笔记
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之源实例无主键表校验出现报错,该怎么办
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。
1020 0
|
存储 编解码 Android开发
Flutter笔记:使用相机
Flutter笔记:使用相机
1160 0
|
缓存 架构师 Linux
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
|
Java Unix Linux
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
695 0
|
网络协议 关系型数据库 MySQL
MySQL技术专题—MySQL报错Got an error reading communication packets问题分析指南
MySQL技术专题—MySQL报错Got an error reading communication packets问题分析指南
3554 0
MySQL技术专题—MySQL报错Got an error reading communication packets问题分析指南