小c错误集锦(1)--MySQL Daemon failed to start

神游

我都干了些什么?????

装的第一个mysqld服务是mysql-5.5,整个安装过程也就是从开源镜像网站下载下来的二进制安装包安装的—整个安装过程:mysql服务安装

mysql-5.5安装好后,在本机上又用自带rpm包安装mysql-server5.1,mysql-5.1

安装好后启动

service mysqld start

直接报错 MySQL Daemon failed to start

编辑mysqld文件

vim /etc/rc.d/init.d/mysqld

在文件中全局搜索“MySQL Daemon failed to start”
/MySQL Daemon failed to start

小c错误集锦(1)--MySQL Daemon failed to start_第1张图片

错误就是这个错误语句

if ! /bin/kill -0 $safe_pid 2>/dev/null; then
                echo "MySQL Daemon failed to start."
                ret=1
                break
fi

#kill -0 pid > /dev/null #进程号pid存在返回0(为真),不存在返回1(为假)
#可用此脚本做测试
#!/bin/sh
kill -0 PID_NUMBER 2>/dev/null
RET=$?
echo $RET

也就是说$safe_pid不存在,再全局搜索safe_pid

发现

这里写图片描述

$! 代表 运行于后台的最后一个作业的PID

猜测产生这个pid的来源就是这个指令

$exec   --datadir="$datadir" --socket="$socketfile" \
                --pid-file="$mypidfile" \
                --basedir=/usr --user=mysql >/dev/null 2>&1 &

于是在此段脚本上方测试查看exec,datadir,socketfile,mypidfile等变量内容

小c错误集锦(1)--MySQL Daemon failed to start_第2张图片

运行mysql服务脚本

service mysqld start

测试内容分别输出为

exec test exec : /usr/bin/mysqld_safe
exec test mydatafile : /date/mydate
exec test socketfile : /tmp/mysql.sock 
exec test mypidfile : /var/run/mysqld/mysqld.pid

此时动态观察错误日志文件

tail -f /date/mydate/www.xiaoc.com.err

于是在控制台输出

/usr/bin/mysqld_safe --datadir=/date/mydate --socket=/tmp/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --vasedir=/usr --user=mysql

看到日志文件输出:Version: '5.1.73-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution

3306端口被正常监听了,我猜测服务已经启动

于是查看mysqld状态

service mysql status

mysqld服务果然正在running….

然后关闭服务,再此开启服务,都没有问题……

全程懵逼………

小c错误集锦(1)--MySQL Daemon failed to start_第3张图片

你们有遇到过这样的情况吗???


经过打磨,问题变得明朗了起来。

原来是之前用二进制包安装mysql服务的时候,将一个扩展配置文件support_files/my-large.cnf复制到了/etc/my.cnf ,参考二进制安装mysql原文:mysql服务安装

当用rpm包再次安装mysql服务的时候,mysqld的服务脚本会先去读取/etc/路经下是否已经有对mysql服务的扩展配置,如my.cnf,如有则先读取配置文件中属性值。

#这个函数就是读取本机上已存在的my.cnf配置文件,若为空,则就赋予datadir、socket值为后面的默认值

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"

所以,整个问题的关键是/etc/my.cnf,将此文件删除。

重新安装mysqld服务

yum -y reinstall mysql-server

运行

service mysqld start

小c错误集锦(1)--MySQL Daemon failed to start_第4张图片
这里写图片描述

马上对mysqld进行数据库初始化,成功开启服务。

你可能感兴趣的:(linux,错误集锦)