《MySQL排错指南》——1.7 当服务器无响应的时候

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章,第1.7节,作者:【美】Sveta Smirnova(斯维特 斯米尔诺娃),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 当服务器无响应的时候

有时候,MySQL客户端会收到严重的错误消息“在请求中丢失与服务器的连接”或者“服务器已停止”。尽管我希望你永远不会遇到这个错误,但是有所准备总是有好处的。由MySQL安装本身引起的这个问题主要有两个原因:服务器问题(最有可能是崩溃)或者滥用连接选项(通常是超时选项或者max_allowed_packet)。

第3章将讨论连接相关的配置。第4章会讨论硬件问题和第三方软件相关的问题。这里简短地介绍一下如果遇到服务器崩溃该做些什么。

首先,确定你的服务器是否真的崩溃。你可以借助进程状态监控器进行确认。如果你在服务器崩溃后运行了mysqld_safe或者其他守护进程重启服务器,错误日志将会包含表明服务器已经重启的消息。当mysqld启动时,它始终会在错误日志文件中输出类似如下的信息:
image

因此,如果你找到了类似消息,那么服务器已经重启了。如果没有任何消息,并且服务器已经启动并在运行,那么丢失连接的问题最有可能是因为滥用连接选项导致的,这将在第3章进行讨论。

提示 提示

如果你记得MySQL服务器原来是何时启动的,你可以使用状态变量uptime,该变量的值代表服务器已启动的时间,单位是秒:

image

该信息也可以帮你检查mysqld是否是因为操作系统的重启而失败的。仅需要比较该变量的值和操作系统的启动时间即可。

依赖于错误日志文件是因为我工作经历的原因,比如当客户在服务器崩溃数小时后发现问题,甚至有时候是在mysqld计划重启后才发现问题。
如果你确认服务器已经重启了,你应该再次检查错误日志去搜索崩溃本身的信息。通常,你会从错误日志中获取足够的崩溃信息,从而避免发生同样的情况。第6章将讨论如何调查你可能会遇到的少数困难情况。现在,我们再次回到错误日志文件,来看一下在服务器崩溃情况下的典型内容示例。这里我将摘录出大量信息:
image

image

image

表明崩溃原因的关键行是:

image

这意味着MySQL服务器在向操作系统申请资源(例如,访问文件或者内存)后终止了,得到了错误代码11。在大多数操作系统里,这个信号代表分段错误(segmentation fault)。你可以在你的操作系统的用户手册中获取更详细的信息。对于UNIX和Linux系统可以执行man命令。在Windows操作系统里,相似的情况通常会产生类似“mysqld got exception 0xc0000005”的日志消息。查找Windows的用户手册可以获取该异常代码的含义。

下面是从某个线程中导致服务器崩溃的请求的相关日志中提取的摘要信息:

image

为了进一步分析,重新执行查询来检查其是否是崩溃的原因:

image

提示 提示

当我推荐你重现错误的时候,我假定你是在开发服务器而不是生产服务器中进行的。6.3节将讨论如何安全地在特定环境下进行问题调优。请不要尝试重试示例中的语句,这是一个已知的bug#47780,已经在当前版本修复了。从5.0.88、5.1.41、5.5.0和6.0.14版本开始,该bug已经修复。
当目前为止,你已经找到并确认崩溃的原因,然而你还需要重写请求,从而避免下次服务器再次崩溃。现在,我们可以从日志的堆栈信息中获得帮助:

image

与错误相关的行是调用Item_subselect和Item_singlerow_subselect的部分:

image

我是如何确定这是罪魁祸首的呢?在这个示例中,我发现在之前排错过程中的调用。不过经验告诉我,最好还是从头开始排查问题。最前面的几个函数通常是操作系统调用的,这些函数可能会和问题相关,不过在当前环境下没有任何帮助,因为对它们你什么都做不了,接下来是对MySQL库的调用。自上而下地检查这些函数,以便找到哪些是与你相关的。例如,对于String4copy或Item_cache_str5store函数你没什么可做的,但是你可以重写子查询,因此我们从这里开始。

这里,哪怕不去看mysqld的源码,我们也可以找到崩溃的原因。推测子查询可能是问题的所在,这是一个不错的假设,因为子查询可以很容易地转换成JOIN。尝试重写查询然后测试它:

image

新查询并没有崩溃,因此你需要做的就是把应用程序中的查询改成等价的形式。

你刚刚学到了一些MySQL问题排查中的重要事情:当遇到未知的错误时首先应该做的是检查错误日志文件。始终要打开日志。
这里我想补充一点关于bug的内容。当你遇到崩溃并确定了原因的时候,应检查一下MySQL的bug数据库,看看有无类似的问题。如果你找到可能与你相关的bug,确认它是否修复了。如果已经修复了,那么把你的服务器升级到bug已修复的版本(或者更新的版本)。这样做可以节约你的时间,因为你不再需要修改有问题的语句了。

如果你没找到与你相关的bug,尝试下载最新的MySQL版本,然后再执行查询。如果bug再次出现,请把它提交给我们。使用最新的稳定版本是非常重要的,因为它包含当前修复的所有bug,许多老的问题在这里不会重现。第6章中会讨论如何在沙盒环境下安全地测试崩溃的情形。

不仅是特定的查询会引起崩溃,而且服务器运行的环境也有可能引起崩溃。最常见的原因就是缺少可用的内存(RAM)。特别当用户分配超大缓冲区时最容易发生。正如我之前提到的那样,mysqld始终需要比所有缓冲区容量总和略多的内存。通常情况下,错误日志文件包含可用内存的粗略估计。它看起来如下所示:

image

这种估计不是精确的,不过仍然值得确认。上面展示的信息表明mysqld可以使用高达20GB的内存。虽然现在你可以很容易地获得强大的计算机,但是仍有必要确认你是否真的拥有20GB内存。

该环境中的另一个问题是,有其他的应用程序与MySQL服务器一起运行。在生产环境中,最好为MySQL指定一台专门的服务器,因为其他应用程序可能会占用你希望MySQL使用的资源。第4章将讨论如何调试其他应用程序对mysqld的影响。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
63 28
|
26天前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
26天前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
2月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
93 25
|
2月前
|
监控 关系型数据库 MySQL
如何解决 MySQL 数据库服务器 CPU 飙升的情况
大家好,我是 V 哥。当 MySQL 数据库服务器 CPU 飙升时,如何快速定位和解决问题至关重要。本文整理了一套实用的排查和优化套路,包括使用系统监控工具、分析慢查询日志、优化 SQL 查询、调整 MySQL 配置参数、优化数据库架构及检查硬件资源等步骤。通过一个电商业务系统的案例,详细展示了从问题发现到解决的全过程,帮助你有效降低 CPU 使用率,提升系统性能。关注 V 哥,掌握更多技术干货。
275 0
|
22天前
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
|
1月前
|
域名解析 人工智能 弹性计算
DeepSeek服务器繁忙解决方法:使用阿里云一键部署DeepSeek个人网站!
通过阿里云一键部署DeepSeek个人网站,解决服务器繁忙问题。学生用户可领取300元代金券实现0成本部署,普通用户则可用99元/年的服务器。教程涵盖从选择套餐、设置密码到获取百炼API-KEY的全流程,助您快速搭建专属大模型主页,体验DeepSeek、Qwen-max、Llama等多款模型,无需代码,最快5分钟完成部署。支持绑定个人域名,共享亲友使用,日均成本仅约1元。
132 10
|
3天前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
80 28
|
4天前
|
存储 机器学习/深度学习 人工智能
阿里云第八代云服务器c8i与g8i深度解析:技术对比、场景适配与选购指南
阿里云服务器计算型c8i与通用型g8i实例属于阿里云的第八代云服务器实例规格,是除了计算型c7与c8y和通用型g7与g8y之外同样深受用户喜欢的云服务器实例规格。本文将详细解析计算型c8i与通用型g8i实例的技术特性、适用场景、性能优势,以及最新的活动价格情况,并为用户提供购买建议。
|
1月前
|
弹性计算 运维 监控
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
本文介绍了如何通过阿里云获取ECS云服务器并进行操作系统配置与组件安装,以实现高效的资源管理和系统监控。阿里云凭借强大的基础设施和丰富的服务成为用户首选。文中详细描述了获取ECS、RAM授权、开通操作系统控制台及组件安装的步骤,并展示了如何利用控制台实时监控性能指标、诊断系统问题及优化性能。特别针对idle进程进行了深入分析,提出了优化建议。最后,建议定期进行系统健康检查,并希望阿里云能推出更友好的低成本套餐,满足学生等群体的需求。
138 17
【阿里云】控制台使用指南:从创建ECS到系统诊断测评

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等