隨Linux開機(jī)自動(dòng)啟動(dòng)mysql
在MySQL的管理過程中,會(huì)遇到PC Server脫機(jī)或者重啟,我需要在主機(jī)啟動(dòng)后再將MySQL服務(wù)啟動(dòng)。如果上百臺(tái)或者更多的MySQL主機(jī)進(jìn)行維護(hù)時(shí),可能會(huì)有多臺(tái)主機(jī)出現(xiàn)類似問題,要是每次都手動(dòng)操作,是很繁瑣的事情。我們可以采用隨系統(tǒng)一起啟動(dòng)MySQL服務(wù),這樣就解決了頻繁手動(dòng)啟動(dòng)MySQL的問題。
要實(shí)現(xiàn)隨開啟自動(dòng)啟動(dòng)mysqld,我們需要搞定如下幾個(gè)問題:
1. Linux開機(jī)自動(dòng)啟動(dòng)腳本放在哪兒?
一般的,作為服務(wù)器使用的Linux一般會(huì)以“完全多用戶模式(Multi-User Mode with Networking)”級(jí)別來啟動(dòng),這種情況下Linux在啟動(dòng)時(shí)會(huì)運(yùn)行/etc/rc.d/rc3.d/下的全部腳本。例如我們?cè)谶@個(gè)目錄下會(huì)看到腳本”/etc/rc.d/rc3.d/S90crond”,意味著開機(jī)啟動(dòng)時(shí)會(huì)運(yùn)行S90crond腳本。
2. Linux如何運(yùn)行這些腳本?
既然已經(jīng)知道自動(dòng)啟動(dòng)腳本該放在哪兒了,一切就好辦。我們只需要將一個(gè)啟動(dòng)MySQL的腳本放過去就好了。下面是我們的一個(gè)簡單的啟動(dòng)腳本v0.1 mysqldauto
$vi mysqldauto
#!/bin/sh
# Version: 0.1 by orczhou@gmail.com
/opt/mysql/bin/mysqld_safe --user=mysql & #這里需要修改為你的mysqld_safe目錄
$chmod +x mysqldauto
$mv mysqldauto /etc/rc.d/init.d/
$ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc3.d/S99mysqld
這樣我們就把創(chuàng)建的mysqldauto腳本放到了/etc/rc.d/rc3.d/下面(注意這里使用了link的方式),mysqld可以自動(dòng)啟動(dòng)了。
這有兩個(gè)問題需要解釋:
* * * * * 為什么不直接在目錄/etc/rc.d/rc3.d/下創(chuàng)建文件,而要?jiǎng)?chuàng)建一個(gè)軟連接?這并不是必須的。但是這樣做是有很多好處的(后面會(huì)解釋),不過這樣做至少會(huì)看起來更加專業(yè)。
* * * * * 為什么文件名要用S99mysqld?這是規(guī)則,在rc3.d下面的腳本如果以字母S開頭,那么執(zhí)行時(shí)Linux會(huì)給它傳遞一個(gè)start參數(shù)(如果以字母K開頭,則會(huì)傳遞stop參數(shù));S后面接個(gè)數(shù)字,表示了這個(gè)腳本的啟動(dòng)順序,如果目錄rc3.d下還有S98*那么它會(huì)在S99之前運(yùn)行。(看到這兒,你可以猜測一下前面我們?yōu)槭裁匆獎(jiǎng)?chuàng)建軟連接了)
好了,自此你的mysqld就已經(jīng)可以隨Linux開機(jī)自動(dòng)啟動(dòng)了。
3. 怎樣做更專業(yè)些?
上面這樣做,已經(jīng)可以解決問題了,不過寫法多少有些“山寨”,下面我們看看怎樣改造一下。
* * * * * 改造1:處理參數(shù)start。既然前面提到以字母S開頭的腳本會(huì)自動(dòng)傳遞一個(gè)參數(shù)start,K則會(huì)傳遞stop。那么我再做如下修改:
$vi mysqldauto
#!/bin/sh
# Version: 0.2 by orczhou@gmail.com
MYSQLHOME=/opt/mysql #這里需要修改為你的mysql安裝目錄
if [ $# -ge 1 ];then
mysqldProc=`ps -ef|grep -E "mysqld.+safe"|grep -v "grep"|wc -l`
if [ $1 = "stop" ] ;then
if [ $mysqldProc -eq 1 ];then
$MYSQLHOME/bin/mysqladmin -uroot shutdown
fi
elif [ $1 = "start" ];then
if [ $mysqldProc -eq 0 ];then
$MYSQLHOME/bin/mysqld_safe --user=mysql &
fi
fi
fi
做了如此改造后,我們腳本需要接收兩個(gè)參數(shù)start stop了。如果你想讓你mysqld在關(guān)閉主機(jī)的時(shí)候自動(dòng)關(guān)閉,那么stop參數(shù)就可以起作用了:
$ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc0.d/K20mysqld
這里做軟連接好處就體現(xiàn)出來了,啟動(dòng)和關(guān)閉只需要用一個(gè)腳本就可以了。
* * * * * 改造2:當(dāng)你面臨幾十上百臺(tái)主機(jī)的時(shí)候,MySQL的啟動(dòng)參數(shù)可能會(huì)不一樣,例如備庫啟動(dòng)時(shí)可能需要mysqld_safe –user=mysql –read_olny=1 &,這種情況怎么辦呢?這里提供一個(gè)解決思路。
在主機(jī)上運(yùn)行一個(gè)腳本,探測當(dāng)前mysqld的啟動(dòng)參數(shù),然后寫到一個(gè)指定的文件里。最后,在你的啟動(dòng)腳本中,讀取這個(gè)文件里面的啟動(dòng)參數(shù)來啟動(dòng)mysqld。It works。
【編輯推薦】