這篇文章主要介紹了MySQL中如何實現(xiàn)service啟動腳本,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我們在搭建MySQL環(huán)境的時候,一般都會按照建議的標(biāo)準(zhǔn)規(guī)范來做,比如拷貝mysql.server到自啟動目錄下。
cp -rf $basedir/support-files/mysql.server /etc/init.d/mysql
然后設(shè)置MySQL自啟動的服務(wù),配置完成之后就可以運行命令service mysql.server start 來啟動MySQL了。
/sbin/chkconfig --add mysql
/sbin/chkconfig --level 2345 mysql on
當(dāng)然這個是自動擋的操作,我們也可以手動檔完成。我們來看看這個神奇的腳本在做些什么。腳本的內(nèi)容較長,我就列出一部分內(nèi)容來。
首先這個文件的名字沒有直接的影響了,我們可以用mysql mysql.server等等,在這個目錄下注冊都可以正常識別。
# service mysql status
SUCCESS! MySQL (Percona Server) running (15924)在/etc/inid.d這個目錄下,這個mysql命名的腳本文件其實也不大,大概10K的內(nèi)容,不到400行的腳本量。 # ll mysql
-rwxr-xr-x 1 root root 11056 Aug 28 2013 mysql我們?nèi)〕鲋攸c的部分來解析。
首先這個腳本支持start,stop,restart,reload(或者是force-reload),status這個幾個選項。
start的部分核心部分即為:
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
其實這個選項很容易理解了,就是mysqld_safe來啟動,需要制定幾個啟動參數(shù),有些參數(shù)雖然為空,但是會從/etc/my.cnf中獲取,也可以支持額外的擴展參數(shù)。
我們修改下腳本,把這幾個參數(shù)值手工打印出來。
分別是$bindir $datadir $mysqld_pid_file_path $other_args
# service mysql start
Starting MySQL (Percona Server)
/usr//bin
/U01/mysql
/U01/mysql/mysql.pid
...... SUCCESS!datadir會有一系列校驗,但是也會以/etc/my.cnf的優(yōu)先
# cat /etc/my.cnf|grep datadir
datadir = /U01/mysql
另外basedir也是類似,你看my.cnf里設(shè)置的如果不夠規(guī)范,也在應(yīng)用的時候就是/usr//bin了。
# cat /etc/my.cnf|grep basedir
basedir = /usr/
接下來mysqld_safe的腳本下面會有較多的校驗。
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?啟動的過程中,會在/var/lock/subsys下生成一個鎖定文件,就是一個進(jìn)程號的標(biāo)記。
# ll /var/lock/subsys/mysql
-rw-r--r-- 1 root root 0 May 9 23:03 /var/lock/subsys/mysqlwait_for_pid這個函數(shù)會調(diào)用created(start模式),removed(stop模式)來處理pid文件。
而stop模式的實現(xiàn)相對更直接一些,它是使用kill -0的方式來檢測進(jìn)程是否存在,如果存在則使用kill的命令來殺掉mysqld進(jìn)程。
if test -s "$mysqld_pid_file_path"
then
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill -0 $mysqld_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL (Percona Server)"
kill $mysqld_pid
# mysqld should remove the pid file when it exits, so wait for it.
wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
else
log_failure_msg "MySQL (Percona Server) server process #$mysqld_pid is not running!"
rm "$mysqld_pid_file_path"
fi這個過程中,后臺日志會逐步輸出,然后釋放鎖定文件。
reload的過程使用的相對和緩,使用了kill -HUP的選項,如果想要更改配置而不需停止并重新啟動服務(wù),可以使用這個選項。
'reload'|'force-reload')
if test -s "$mysqld_pid_file_path" ; then
read mysqld_pid < "$mysqld_pid_file_path"
kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL (Percona Server)"
touch "$mysqld_pid_file_path"
else
log_failure_msg "MySQL (Percona Server) PID file could not be found!"
exit 1
fi
restart的部分就是間接調(diào)用stop和start選項。
'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
if $0 stop $other_args; then
$0 start $other_args
else
log_failure_msg "Failed to stop running server, so refusing to try to start."
exit 1
fistatus的部分更簡單,就是讀取pid文件中的進(jìn)程號信息。
不要小看這個腳本,里面涉及不少邏輯校驗,也可以在這個基礎(chǔ)上根據(jù)自己的需求來做一些改變。至少在這一點上,這個腳本是可以根據(jù)我們的需求來定制的。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MySQL中如何實現(xiàn)service啟動腳本”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
文章名稱:MySQL中如何實現(xiàn)service啟動腳本-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://jinyejixie.com/article2/eehoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、移動網(wǎng)站建設(shè)、服務(wù)器托管、云服務(wù)器、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容