511数据库无法启动故障

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 主机重启后mysql5.7无法通过systemctl启动

数据库mysq服务无法启动

临时解决办法:

经人提醒用mysqld_safe方式直接启动(自打脸1024次)

事件回顾


赞到爆活动粉丝猛增导致数据库主机CPU满载,系统卡顿

解决过程

  1.  将数据库关闭,操作命令:systemctl stop  mysqld
  2. 将数据库重启一次检验是否可正常重启 systemctl start  mysqld可正常启动
  3. 将数据库关闭
  4. 在阿里云控制台将数据库主机扩容至16C/32G高性能计算型ECS
  5. 登陆数据库主机systemctl start  mysqld无法启动,日志报错如下


mysql报错信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=0
max_threads=300
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 127390 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
 
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x40000
/usr/sbin/mysqld (my_print_stacktrace+0x35)[0xf4c845]
/usr/sbin/mysqld (handle_fatal_signal+0x4a4)[0x7dd584]
/lib64/libpthread .so.0(+0xf370)[0x7f814fcb7370]
/usr/lib64/mysql/plugin/server_audit .so(get_db_mysql57+0x12)[0x7f81107123e2]
/usr/lib64/mysql/plugin/server_audit .so(+0xa541)[0x7f8110712541]
/usr/sbin/mysqld [0x7dd6c6]
/usr/sbin/mysqld (_Z24plugin_foreach_with_maskP3THDPFcS0_P13st_plugin_intPvEijS3_+0x1b9)[0xd3e349]
/usr/sbin/mysqld (_Z18mysql_audit_notifyP3THD30mysql_event_general_subclass_tiPKcm+0x3d6)[0x7de326]
/usr/sbin/mysqld (my_message_sql+0x6f)[0x7cf28f]
/usr/sbin/mysqld (my_error+0xf6)[0xf47246]
/usr/sbin/mysqld (my_register_filename+0x29a)[0xf49b5a]
/usr/sbin/mysqld (my_create+0x6c)[0xf46a9c]
/usr/sbin/mysqld [0x7d0c60]
/usr/sbin/mysqld (_Z11mysqld_mainiPPc+0x16c0)[0x7d7fb0]
/lib64/libc .so.6(__libc_start_main+0xf5)[0x7f814e697b35]
/usr/sbin/mysqld [0x7cd49d]
The manual page at http: class="bash plain">//dev .mysql.com /doc/mysql/en/crashing .html contains
information that should help you find out what is causing the crash.
2018-05-11T06:49:23.670507Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld .pid ended

被上图中的第8行日志

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 127390 K  bytes of memory

Hope that's ok; if not, decrease some variables in the equation.

所迷惑,我们一直在修改上面的几个参数,但是数据库仍然无法启动

根据原因探索

  • 检查/etc/init.d/mysqld系统启动脚本,其中有一段代码是判断PID文件是否存在,如果/etc/my.cnf文件里无配置就会用/var/run/mysqld/mysqld.pid默认配置文件

代码如下

mysqld启动脚本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
get_mysql_option(){
     result=$( /usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1)
     if [ -z "$result" ]; then
         # not found, use default
         result= "$3"
     fi
}
get_mysql_option mysqld datadir "/var/lib/mysql"
datadir= "$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile= "$result"
get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"
errlogfile= "$result"
get_mysql_option mysqld_safe pid- file "/var/run/mysqld/mysqld.pid"
mypidfile= "$result"

  • 检查/var/run下并无此文件,因为主机重启后系统会自动将此文件删除

三种解决方案:

原理解析:/etc/init.d/mysqld原理其实就是调用mysqld_safe来启动数据库

  • 方法一:给/etc/my.cnf添加配置让mysql到自己的数据目录下写/mydata/mysqld.pid

    [mysqld_safe]

    log-error=/mydata/mysqld.log

    pid-file=/mydata/mysqld.pid
    结果:systemctl start mysqld会一直卡在那,systemctl不正常结束返回,此时数据库是已经正常起来了,而操作系统命令systemctl找不到/var/run/mysqld/mysqld.pid而卡在那(失败)

  • 方法二:更换启动方式,直接用mysqld_safe --defaults-file=/etc/my.cnf启动,此方法是默认到/mydata目录下创建mysqld.pid文件,但是关闭时用
    mysqladmin  shutdown -uroot   -P6033 -p方式来关闭,还要输入密码较麻烦而且做开机启动也麻烦
  • 方法三:修改/etc/init.d/mysqld启动脚本添加自动创建/var/run/mysqld文件夹

    如果文件夹不存在就自动创建

    ?
    1
    2
    3
    4
    5
    6
    test -d /var/run/mysqld
    if [ $? - eq 1  ]
    then
    mkdir /var/run/mysqld/
    chown mysql:mysql /var/run/mysqld
    fi

    主机重启可自动将数据库拉起。

总结

        此次故障处理心得

                <p class="title">心得</p>
                        <span class="aui-icon icon-warning">Icon</span>
            <div class="message-content">
                        <p>1:一直被mysql的报错迷惑不断调试各个buffer的size大小,</p><p>2:忘记了尝试用mysqld_safe来启动</p><p>3:从库没能在第一时间切换成主库,这个在接下来的时候进行方案设计和实施</p><p>4:业务逻辑没有实现读写分离从库一直空闲而主库却已经累死</p><p>5:慢查询超时未告警部署</p><p>6:直接导致丢失大量可能性粉丝</p>
                </div>
</div>

为赞到爆的运营人员的公关和开发人员的应急点赞。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
存储 运维 负载均衡
关系型数据库引入故障转移机制
【5月更文挑战第4天】关系型数据库引入故障转移机制
27 8
关系型数据库引入故障转移机制
|
关系型数据库 MySQL 数据库
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
316 0
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
|
3天前
|
JSON 自然语言处理 负载均衡
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
57 0
|
3天前
|
运维 Oracle 关系型数据库
服务器数据恢复-raid5故障导致上层oracle数据库故障的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。 通过管理后台查看服务器中硬盘的状态,显示有两块硬盘处于离线状态。
|
7月前
|
SQL Java 关系型数据库
JSP故障信息管理系统myeclipse开发sql数据库web结构计算机java编程
JSP 故障信息管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
19 0
|
8月前
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
10月前
|
存储 运维 监控
分布式数据库HBase的重要机制和原理的宕机恢复和故障处理
HBase是一个分布式数据库系统,支持高可用性、高性能和高伸缩性。在分布式环境中,数据的分布式存储和管理是非常重要的。HBase通过分布式存储和管理数据来实现高可用性和高性能。同时,HBase还提供了一些重要的机制和原理来支持宕机恢复和故障处理。
328 1
|
11月前
|
Oracle 关系型数据库 网络安全
连接Oracle数据库失败(ORA-12514)故障排除
ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库实例,这里姚远老师告诉大家如何排除这类故障。
4701 0
|
12月前
|
存储 关系型数据库 MySQL
mysql 数据库无法启动(Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint .... and)
数据库机器的CPU和主板都换了,重新开机,发现mysql数据库无法启动!
171 0
|
SQL 安全 数据库
故障解决:SQL Server数据库附加失败,错误3415、错误5120
本文为大家分享了SQL Server数据库附加失败的具体解决方法,供大家参考,具体内容如下
故障解决:SQL Server数据库附加失败,错误3415、错误5120