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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 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;
相关文章
|
C语言
C语言数据的输入与输出
C语言数据的输入与输出
209 0
|
存储 人工智能 分布式计算
Parquet 文件格式详解与实战 | AI应用开发
Parquet 是一种列式存储文件格式,专为大规模数据处理设计,广泛应用于 Hadoop 生态系统及其他大数据平台。本文介绍 Parquet 的特点和作用,并演示如何在 Python 中使用 Pandas 库生成和读取 Parquet 文件,包括环境准备、生成和读取文件的具体步骤。【10月更文挑战第13天】
2734 60
|
SQL 监控
MP-p6spy日志分析打印
MP-p6spy日志分析打印
234 0
|
机器学习/深度学习 算法
【MATLAB】GA_BP神经网络回归预测算法
【MATLAB】GA_BP神经网络回归预测算法
374 3
【MATLAB】GA_BP神经网络回归预测算法
|
机器学习/深度学习 人工智能 自然语言处理
人工智能(AI)技术的发展史
人工智能 (AI) 的发展历程从20世纪50年代起步,历经初始探索、早期发展、专家系统兴起、机器学习崛起直至深度学习革命。1950年图灵测试提出,1956年达特茅斯会议标志着AI研究开端。60-70年代AI虽取得初步成果但仍遭遇困境。80年代专家系统如MYCIN展现AI应用潜力。90年代机器学习突飞猛进,1997年深蓝战胜国际象棋冠军。21世纪以来,深度学习技术革新了AI,在图像、语音识别等领域取得重大成就。尽管AI已广泛应用,但仍面临数据隐私、伦理等挑战。未来AI将加强人机协作、增强学习与情感智能,并在医疗、教育等领域发挥更大作用。
|
编译器 C++
【C++】类和对象(中)(2)
【C++】类和对象(中)(2)
|
弹性计算 关系型数据库 MySQL
数据库连接异常:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01问题处理
今天项目中新增了一部分接口,本地测试好之后打包部署到测试环境,数据库竟然连接失败,报错信息如下:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01,这个报错信息的意思数数据库连接异常,相信很多人都遇到过,现在总接一下数据库远程连接遇到此问题的定位思路。
数据库连接异常:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01问题处理
|
安全 网络协议 Ubuntu
|
JavaScript 数据安全/隐私保护
从0到1搭建一款Vue可配置视频播放器组件(Npm已发布)
从0到1搭建一款Vue可配置视频播放器组件(Npm已发布)
从0到1搭建一款Vue可配置视频播放器组件(Npm已发布)
条码打印软件如何实现二维码内容换行显示
制作公司二维码名片的时候往往会涵盖:公司名称,地址,电话,网址等等,通过微信扫描就可以轻松实现公司信息的呈现。如果制作的二维码名片中的信息可以换行显示,那么是不是会比较清晰明了呢,下面看一下二维码名片中的内容换行和不换行的对比效果,如下图:   通过图片可以看到,二维码名片中的内容换行显示会更简洁,也更容易辨认。
2294 0