神遊
我都幹了些什麼?????
裝的第一個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進行數據庫初始化,成功開啓服務。