隨Linux開機自動啟動mysql

2022-03-31 23:20:51 字數 2278 閱讀 5661

在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檔案...