美文网首页
常见MySQL启动失败案例分析

常见MySQL启动失败案例分析

作者: 古飞_数据 | 来源:发表于2023-09-17 09:23 被阅读0次

    1.权限问题
    2.参数加载错误,不能启动&更改参数后无法正启动
    3为什么启动多实例失败
    4.遇到启动故障排查思路
    5.没有error log怎么处理

    1. 权限问题

    Error Log中可以看到error code: 13
    perror 13 ->Permission denied 
    selinux没有关闭
    getenforce
    Setenforce o
    原来MySQL已经存在,又去启动新的mysqld进程
    

    ls -l /data/mysql/*
    ls -l /data/mysql/mysql3306/*
    chown -R mysql.mysql /data/mysql/mysql3306/
    getenforce /setenforce 0/vi /etc/sysconfig/selinux

    perror 13 Permission denied
    perror 24 Too many open file
    perror 28 No space left on device
    perror 27 File too large
    perror 32 Broken pipe

    ulimit -a 默认只有1024

    2.参数加载错误不能启动

    场景
    配置文件在/etc/my.cnf
    启动/usr/local/mysql/bin/mysqld &
    日子一天一天过,一切可以正常启动
    然而某天忽然不能启动了
    查看errro log
    
    ls -lh data/   查看ibdata1的大小 填写到my.cnf
    innodb_data_file_path   -ibdata1:90M:autoextend
    redo 
    
    
    ibdata1特别大,希望变小
    
    
    

    strace /usr/local/mysql/bin/mysqld 2>&1 | tree 1.log
    vim 1.log

    查看两个文件的差异

    grep "ibdata1" /etc/my.cnf
    grep "ibdata1" /usr/local/mysql/etc/my.cnf
    
    diff /etc/my.cnf /usr/local/mysql/etc/my.cnf
    

    最担心的情况是参数加载错误,还是启动成功了?
    很好的解决方法是,启动的时候直接指定参数--defaults-file

    更改的东西一定需要有备份,可以回滚

    1.[ERROR] [MY-000067][Server] unknown variable
    'internal_tmp_disk_storage_engine=lnnoDB'
    这种错误:查一下对版本是不是支持这个参数,是不是拼写错误。可以先注释掉偿试一下。
    心
    2.[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system data file './ibdata1' 
    is of a different size 6400 pages (rounded down to MB) than specified in the.cnf file: initial 12800 pages, max 0(relevant if non-zero) pages!
    文件大小不一致
    直接去目录下Is -I确认大小,参数可以字节为单位
    

    loose-internal_tmp_disk_storage_engine=lnnoDB 通过loose标识,级别参数错误,也可以启动

    3 为什么启动多实例失败

    端口号占用
    [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
    [ERROR] Do you already have another mysqld server running on port: 3306 ?
    
    磁盘空间不足
    28: No space left on device
    用打开线程达到最大值
    11: Resource temporarily unavailable
    
    
    lsof -i:3306  找pid
    ps aux| grep 23149
    
    cd /proc/23149
    ls
    或者 lsof -p 23149
    
    
    初始化不正确
    相应的data目录下没数据
    多版本下,配置basdir指定错误
    
    

    4.启动故障排查思路

    明确MySQL的启动流程
    自动启动,一般是调用mysql.server -> mysqld_safe-> mysqld或systemctl调用mysqld
    第一,查看mysql的error log看看有没有具体的报错
    第二,学会工具: lsof , perror , ulimit ,df 这些工具的使用
    第三,学会进阶工具: strace使用
    
    
    判断问题需要提供的信息:版本 安装路径  配置文件 日志
    
    file /etc/init.d/mysql
    sh -x /etc/init.d/mysql start 2>&1 | tee 1.log
    /usr/local/mysql/binn/my_print_defaults mysqld server mysql_server mysql.server
    strace /etc/init.d/mysql start 2>&1 | tree 1.log
    
    updatedb      /    locate my.cnf
    mysql --help | grep my.cnf
    strace /usr/local/mysql/bin/mysqld 2>&1 | tree 1.log
    vim 1.log
    
    ps -auxT | grep  mysqld          --带T参数看启动时间
    

    5.没有error log怎么处理

    配置文件:/etc/my.cnf
    启动方式:/etc/init. d/mysql start
    MySQL不能启动,也没有error log
    但/usr/local/mysql/bin/mysqld -initialize初始化成功(找老师获取my.cnf)分析为什么。
    
    另一种启动:
    InnoDB掉电重启
    lnnoDB被kill重启
    

    相关文章

      网友评论

          本文标题:常见MySQL启动失败案例分析

          本文链接:https://www.haomeiwen.com/subject/qdjzartx.html