共計(jì) 2833 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
這篇文章主要介紹了 MySQL 中如何實(shí)現(xiàn) service 啟動(dòng)腳本,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
我們?cè)诖罱?MySQL 環(huán)境的時(shí)候,一般都會(huì)按照建議的標(biāo)準(zhǔn)規(guī)范來(lái)做,比如拷貝 mysql.server 到自啟動(dòng)目錄下。
cp -rf $basedir/support-files/mysql.server /etc/init.d/mysql
然后設(shè)置 MySQL 自啟動(dòng)的服務(wù),配置完成之后就可以運(yùn)行命令 service mysql.server start 來(lái)啟動(dòng) MySQL 了。
/sbin/chkconfig –add mysql
/sbin/chkconfig –level 2345 mysql on
當(dāng)然這個(gè)是自動(dòng)擋的操作,我們也可以手動(dòng)檔完成。我們來(lái)看看這個(gè)神奇的腳本在做些什么。腳本的內(nèi)容較長(zhǎng),我就列出一部分內(nèi)容來(lái)。
首先這個(gè)文件的名字沒(méi)有直接的影響了,我們可以用 mysql mysql.server 等等,在這個(gè)目錄下注冊(cè)都可以正常識(shí)別。
# service mysql status
SUCCESS! MySQL (Percona Server) running (15924) 在 /etc/inid.d 這個(gè)目錄下,這個(gè) mysql 命名的腳本文件其實(shí)也不大,大概 10K 的內(nèi)容, 不到 400 行的腳本量。 # ll mysql
-rwxr-xr-x 1 root root 11056 Aug 28 2013 mysql 我們?nèi)〕鲋攸c(diǎn)的部分來(lái)解析。
首先這個(gè)腳本支持 start,stop,restart,reload(或者是 force-reload),status 這個(gè)幾個(gè)選項(xiàng)。
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=$?
其實(shí)這個(gè)選項(xiàng)很容易理解了,就是 mysqld_safe 來(lái)啟動(dòng),需要制定幾個(gè)啟動(dòng)參數(shù),有些參數(shù)雖然為空,但是會(huì)從 /etc/my.cnf 中獲取,也可以支持額外的擴(kuò)展參數(shù)。
我們修改下腳本,把這幾個(gè)參數(shù)值手工打印出來(lái)。
分別是 $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 會(huì)有一系列校驗(yàn),但是也會(huì)以 /etc/my.cnf 的優(yōu)先
# cat /etc/my.cnf|grep datadir
datadir = /U01/mysql
另外 basedir 也是類(lèi)似,你看 my.cnf 里設(shè)置的如果不夠規(guī)范,也在應(yīng)用的時(shí)候就是 /usr//bin 了。
# cat /etc/my.cnf|grep basedir
basedir = /usr/
接下來(lái) mysqld_safe 的腳本下面會(huì)有較多的校驗(yàn)。
wait_for_pid created $! $mysqld_pid_file_path return_value=$? 啟動(dòng)的過(guò)程中,會(huì)在 /var/lock/subsys 下生成一個(gè)鎖定文件,就是一個(gè)進(jìn)程號(hào)的標(biāo)記。
# ll /var/lock/subsys/mysql
-rw-r–r– 1 root root 0 May 9 23:03 /var/lock/subsys/mysqlwait_for_pid 這個(gè)函數(shù)會(huì)調(diào)用 created(start 模式),removed(stop 模式)來(lái)處理 pid 文件。
而 stop 模式的實(shí)現(xiàn)相對(duì)更直接一些, 它是使用 kill - 0 的方式來(lái)檢測(cè)進(jìn)程是否存在,如果存在則使用 kill 的命令來(lái)殺掉 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 這個(gè)過(guò)程中,后臺(tái)日志會(huì)逐步輸出,然后釋放鎖定文件。
reload 的過(guò)程使用的相對(duì)和緩, 使用了 kill -HUP 的選項(xiàng), 如果想要更改配置而不需停止并重新啟動(dòng)服務(wù),可以使用這個(gè)選項(xiàng)。
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 選項(xiàng)。
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 的部分更簡(jiǎn)單,就是讀取 pid 文件中的進(jìn)程號(hào)信息。
不要小看這個(gè)腳本,里面涉及不少邏輯校驗(yàn),也可以在這個(gè)基礎(chǔ)上根據(jù)自己的需求來(lái)做一些改變。至少在這一點(diǎn)上,這個(gè)腳本是可以根據(jù)我們的需求來(lái)定制的。
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“MySQL 中如何實(shí)現(xiàn) service 啟動(dòng)腳本”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!