隨Linux開機自動啟動mysql
在MySQL的管理過程中,會遇到PC Server脫機或者重啟,我需要在主機啟動后再將MySQL服務啟動。如果上百臺或者更多的MySQL主機進行維護時,可能會有多臺主機出現類似問題,要是每次都手動操作,是很繁瑣的事情。我們可以采用隨系統一起啟動MySQL服務,這樣就解決了頻繁手動啟動MySQL的問題。
要實現隨開啟自動啟動mysqld,我們需要搞定如下幾個問題:
1. Linux開機自動啟動腳本放在哪兒?
一般的,作為服務器使用的Linux一般會以“完全多用戶模式(Multi-User Mode with Networking)”級別來啟動,這種情況下Linux在啟動時會運行/etc/rc.d/rc3.d/下的全部腳本。例如我們在這個目錄下會看到腳本”/etc/rc.d/rc3.d/S90crond”,意味著開機啟動時會運行S90crond腳本。
2. Linux如何運行這些腳本?
既然已經知道自動啟動腳本該放在哪兒了,一切就好辦。我們只需要將一個啟動MySQL的腳本放過去就好了。下面是我們的一個簡單的啟動腳本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
這樣我們就把創建的mysqldauto腳本放到了/etc/rc.d/rc3.d/下面(注意這里使用了link的方式),mysqld可以自動啟動了。
這有兩個問題需要解釋:
* * * * * 為什么不直接在目錄/etc/rc.d/rc3.d/下創建文件,而要創建一個軟連接?這并不是必須的。但是這樣做是有很多好處的(后面會解釋),不過這樣做至少會看起來更加專業。
* * * * * 為什么文件名要用S99mysqld?這是規則,在rc3.d下面的腳本如果以字母S開頭,那么執行時Linux會給它傳遞一個start參數(如果以字母K開頭,則會傳遞stop參數);S后面接個數字,表示了這個腳本的啟動順序,如果目錄rc3.d下還有S98*那么它會在S99之前運行。(看到這兒,你可以猜測一下前面我們為什么要創建軟連接了)
好了,自此你的mysqld就已經可以隨Linux開機自動啟動了。
3. 怎樣做更專業些?
上面這樣做,已經可以解決問題了,不過寫法多少有些“山寨”,下面我們看看怎樣改造一下。
* * * * * 改造1:處理參數start。既然前面提到以字母S開頭的腳本會自動傳遞一個參數start,K則會傳遞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
做了如此改造后,我們腳本需要接收兩個參數start stop了。如果你想讓你mysqld在關閉主機的時候自動關閉,那么stop參數就可以起作用了:
$ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc0.d/K20mysqld
這里做軟連接好處就體現出來了,啟動和關閉只需要用一個腳本就可以了。
* * * * * 改造2:當你面臨幾十上百臺主機的時候,MySQL的啟動參數可能會不一樣,例如備庫啟動時可能需要mysqld_safe –user=mysql –read_olny=1 &,這種情況怎么辦呢?這里提供一個解決思路。
在主機上運行一個腳本,探測當前mysqld的啟動參數,然后寫到一個指定的文件里。最后,在你的啟動腳本中,讀取這個文件里面的啟動參數來啟動mysqld。It works。
【編輯推薦】