#每日一记#MySQL 数据库崩溃(crash)
  

sailyang 1591

{{ttag.title}}
本帖最后由 sailyang 于 2020-11-30 15:03 编辑

检查 MySQL 数据库的启动时间
    Linux 系统中的 systemd 会在 mysqld 进程 crash 后自动重新启动 MySQL 的服务,需要注意的是使用 kill -9 杀死 mysqld 进程系统会自动重新启动,而只使用 kill 命令则不会重新启动,因为执行 kill 命令,系统会发送一个 SIGTERM 信号给 mysqld,mysql 数据库会正常关闭,日志中会出现类似下面的记录:

2020-10-26T09:06:48.435181Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.
MySQL 数据库 crash 后都会重新启动,因此我们有时可能不知道 MySQL 数据库已经 crash 过了,但我们可以从mysql数据库启动时间上找到线索,下面介绍四种检查 MySQL 数据库启动时间的方法。

检查 MySQL 服务状态
scutech@scutech:~$ service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-10-21 05:54:18 NDT; 4 days ago
  Process: 774 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
  Process: 708 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 791 (mysqld)
    Tasks: 27 (limit: 2328)
   CGroup: /system.slice/mysql.service
           └─791 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
显示 MySQL 数据库已经运行 4 天多。

检查 MySQL 中的 uptime 状态
mysql> show global status like 'uptime';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Uptime        | 428334 |
+---------------+--------+
1 row in set (0.32 sec)
这个值是以秒为单位,下面换算成以天为单位是 4 天多。

mysql> select 428334/60/60/24;
+-----------------+
| 428334/60/60/24 |
+-----------------+
|  4.957569444444 |
+-----------------+
1 row in set (0.01 sec)
查询 uptime 状态的另一种方法是使用 mysqladmin version 或在 mysql 客户端里用 “\s” 进行查询。

使用 ps 检查进程启动时间
使用 ps 命令查询发现 mysqld 启动了4天23小时3分种54秒

scutech@scutech:~$ ps -eo pid,user,args,etime|grep mysqld
  791 mysql    /usr/sbin/mysqld --daemoniz  4-23:03:54
检查 MySQL 日志
找关键字 “ready for connections”,可以查到启动信息。

2020-10-21T08:24:18.986765Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.28-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
MySQL 数据库 crash 的常见原因
MySQL 数据库 crash 的最常见原因有两个,一个是 mysql 的 bug , 另一个是 mysql 申请系统资源失败。

MySQL 的 bug
MySQL数据库 crash 的最常见的一个原因当然是 MySQL 的bug。95% 的 bug 都是和具体的 sql 相关,通常是 MySQL crash 前执行的最后一个 sql 有问题,因此定位 bug 时应打开 general query log ,根据最后一个 sql 来查找线索。
当你确定了 crash 的原因后,应该检查一下 MySQL 的 bug 库(https://bugs.mysql.com),通常采用 Advanced search,看看有没有类似的问题。如果你找到了可能与你相关的 bug,确认它是否修复了。如果已经修复了,那么把 MySQL 升级到 bug 已经修复的版本。

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

llj 发表于 2020-12-1 09:42
  
学习学习
新手612152 发表于 2020-12-1 10:00
  
不懂。学习
司马缸砸了光 发表于 2020-12-1 10:09
  
小伙写的很好,加油
美好潼年 发表于 2020-12-8 11:23
  
感谢分享
暗夜星空 发表于 2020-12-12 13:04
  
多谢分享
小鱼儿 发表于 2023-8-8 19:43
  

感谢分享,有助工作
唐三平 发表于 2023-8-8 19:43
  

感谢分享,有助工作
鲤鲤 发表于 2023-8-8 20:11
  
感谢分享,有助于工作
日出 发表于 2023-8-8 20:11
  
感谢分享,有助于工作
发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
干货满满
技术笔记
技术盲盒
产品连连看
2023技术争霸赛专题
技术咨询
秒懂零信任
GIF动图学习
信服课堂视频
自助服务平台操作指引
新版本体验
功能体验
标准化排查
每周精选
信服圈儿
在线直播
每日一记
社区帮助指南
通用技术
天逸直播
技术晨报
安装部署配置
安全攻防
终端接入
深信服技术支持平台
畅聊IT
答题自测
专家问答
技术圆桌
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
北京区每日一练

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人