在MySQL的管理過程中偶爾會遇到一些PC Server宕機或者重啟這時我需要在主機啟動後再將MySQL服務啟動一般情況下這項工作都是簡單的但是當面臨上百台或者更多的MySQL主機的時候這種偶爾可能會很多這種偶爾還會在半夜或者凌晨發生如果每次都手動操作這是很繁瑣的更重要的是如果因此而打斷了凌晨的美夢是不值得的
要實現隨開啟自動啟動mysqld我們需要搞定如下幾個問題
Linux開機自動啟動腳本放在哪兒?
一般的作為服務器使用的Linux一般會以完全多用戶模式(MultiUser Mode with Networking)級別來啟動這種情況下Linux在啟動時會運行/etc/rcd/rcd/下的全部腳本例如我們在這個目錄下會看到腳本/etc/rcd/rcd/Scrond意味著開機啟動時會運行Scrond腳本
Linux如何運行這些腳本?
既然已經知道自動啟動腳本該放在哪兒了一切就好辦我們只需要將一個啟動MySQL的腳本放過去就好了下面是我們的一個簡單的啟動腳本v mysqldauto
$vi mysqldauto
#!/bin/sh
# Version: by
/opt/mysql/bin/mysqld_safe user=mysql & #這裡需要修改為你的mysqld_safe目錄
$chmod +x mysqldauto
$mv mysqldauto /etc/rcd/initd/
$ln s /etc/rcd/initd/mysqldauto /etc/rcd/rcd/Smysqld
這樣我們就把創建的mysqldauto腳本放到了/etc/rcd/rcd/下面(注意這裡使用了link的方式)mysqld可以自動啟動了
這有兩個問題需要解釋
* * * * * 為什麼不直接在目錄/etc/rcd/rcd/下創建文件而要創建一個軟連接?這並不是必須的但是這樣做是有很多好處的(後面會解釋)不過這樣做至少會看起來更加專業
* * * * * 為什麼文件名要用Smysqld?這是規則在rcd下面的腳本如果以字母S開頭那麼執行時Linux會給它傳遞一個start參數(如果以字母K開頭則會傳遞stop參數)S後面接個數字表示了這個腳本的啟動順序如果目錄rcd下還有S*那麼它會在S之前運行(看到這兒你可以猜測一下前面我們為什麼要創建軟連接了)
好了自此你的mysqld就已經可以隨Linux開機自動啟動了
怎樣做更專業些?
上面這樣做已經可以解決問題了不過寫法多少有些山寨下面我們看看怎樣改造一下
* * * * * 改造處理參數start既然前面提到以字母S開頭的腳本會自動傳遞一個參數startK則會傳遞stop那麼我再做如下修改
$vi mysqldauto
#!/bin/sh
# Version: by
MYSQLHOME=/opt/mysql #這裡需要修改為你的mysql安裝目錄
if [ $# ge ];then
mysqldProc=`ps ef|grep E mysqld+safe|grep v grep|wc l`
if [ $ = stop ] ;then
if [ $mysqldProc eq ];then
$MYSQLHOME/bin/mysqladmin uroot shutdown
fi
elif [ $ = start ];then
if [ $mysqldProc eq ];then
$MYSQLHOME/bin/mysqld_safe user=mysql &
fi
fi
fi
做了如此改造後我們腳本需要接收兩個參數start stop了如果你想讓你mysqld在關閉主機的時候自動關閉那麼stop參數就可以起作用了
$ln s /etc/rcd/initd/mysqldauto /etc/rcd/rcd/Kmysqld
這裡做軟連接好處就體現出來了啟動和關閉只需要用一個腳本就可以了
* * * * * 改造當你面臨幾十上百台主機的時候MySQL的啟動參數可能會不一樣例如備庫啟動時可能需要mysqld_safe –user=mysql –read_olny= &這種情況怎麼辦呢?這裡提供一個解決思路
在主機上運行一個腳本探測當前mysqld的啟動參數然後寫到一個指定的文件裡最後在你的啟動腳本中讀取這個文件裡面的啟動參數來啟動mysqldIt works
From:http://tw.wingwit.com/Article/program/MySQL/201311/29483.html