小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

這裏寫圖片描述

錯誤就是這個錯誤語句

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等變量內容

這裏寫圖片描述

運行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….

然後關閉服務,再此開啓服務,都沒有問題……

全程懵逼………

這裏寫圖片描述

你們有遇到過這樣的情況嗎???


經過打磨,問題變得明朗了起來。

原來是之前用二進制包安裝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

這裏寫圖片描述
這裏寫圖片描述

馬上對mysqld進行數據庫初始化,成功開啓服務。

發佈了62 篇原創文章 · 獲贊 53 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章