在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 [email protected]
/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 [email protected]
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
fielif [ $1 = "start" ];then
if [ $mysqldproc -eq 0 ];then
$mysqlhome/bin/mysqld_safe --user=mysql &
fifi
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。
如何讓程式隨開機自動啟動
if 需要開機啟動 得到程式自身的全路徑 dword dwret getmodulefilename null,pfilename,max path 新增乙個子key,並設定值 下面的 test 是應用程式名字 不加字尾.exe lret regsetvalueex hkey,test 0,reg ...
作為linux服務隨開機啟動
在 etc rc.d init.d中編寫lan monitor可執行指令碼如下 bin bash chkconfig 235 98 98 description start or stop lan monitor start stop case 1 in start start stop stop ...
linux配置開機自動啟動
1.linux開機啟動過程為 kernel init etc inittab etc rc.d rc.sysinit etc rc.d rc 切換執行級,最後一步呼叫rc.local getty 2.檢查linux啟動的級別,shell 中執行 runlevel 或者檢視 etc inittab檔案...