MySQL service啟動指令碼淺析(r12筆記第59天)
我們在搭建MySQL環境的時候,一般都會按照建議的標準規範來做,比如複製mysql.server到自啟動目錄下。
cp -rf $basedir/support-files/mysql.server /etc/init.d/mysql
然後設定MySQL自啟動的服務,配置完成之後就可以執行命令service mysql.server start 來啟動MySQL了。
/sbin/chkconfig --add mysql
/sbin/chkconfig --level 2345 mysql on
當然這個是自動擋的操作,我們也可以手動檔完成。我們來看看這個神奇的指令碼在做些什麼。指令碼的內容較長,我就列出一部分內容來。
首先這個檔案的名字沒有直接的影響了,我們可以用mysql mysql.server等等,在這個目錄下注冊都可以正常識別。
# service mysql status
SUCCESS! MySQL (Percona Server) running (15924)在/etc/inid.d這個目錄下,這個mysql命名的指令碼檔案其實也不大,大概10K的內容,不到400行的指令碼量。 # ll mysql
-rwxr-xr-x 1 root root 11056 Aug 28 2013 mysql我們取出重點的部分來解析。
首先這個指令碼支援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來啟動,需要制定幾個啟動引數,有些引數雖然為空,但是會從/etc/my.cnf中獲取,也可以支援額外的擴充套件引數。
我們修改下指令碼,把這幾個引數值手工列印出來。
分別是$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的優先
# cat /etc/my.cnf|grep datadir
datadir = /U01/mysql
另外basedir也是類似,你看my.cnf裡設定的如果不夠規範,也在應用的時候就是/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下生成一個鎖定檔案,就是一個程式號的標記。
# ll /var/lock/subsys/mysql
-rw-r--r-- 1 root root 0 May 9 23:03 /var/lock/subsys/mysqlwait_for_pid這個函式會呼叫created(start模式),removed(stop模式)來處理pid檔案。
而stop模式的實現相對更直接一些,它是使用kill -0的方式來檢測程式是否存在,如果存在則使用kill的命令來殺掉mysqld程式。
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的選項,如果想要更改配置而不需停止並重新啟動服務,可以使用這個選項。
'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的部分就是間接呼叫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檔案中的程式號資訊。
不要小看這個指令碼,裡面涉及不少邏輯校驗,也可以在這個基礎上根據自己的需求來做一些改變。至少在這一點上,這個指令碼是可以根據我們的需求來定製的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2138795/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL中的binlog和redo淺析(r12筆記第5天)MySql筆記
- Oracle 12c DBCA淺析(r12筆記第48天)Oracle筆記
- MySQL原始碼安裝總結(r12筆記第12天)MySql原始碼筆記
- MySQL引數對比淺析(r11筆記第97天)MySql筆記
- MySQL中的derived table(r12筆記第47天)MySql筆記
- 淺析Lua指令碼:MySQL Proxy工作機制指令碼MySql
- 在eclipse中配置MySQL原始碼環境(r12筆記第14天)EclipseMySql原始碼筆記
- Vuex 原理淺析筆記Vue筆記
- Centos學習筆記14 – java程式啟動指令碼CentOS筆記Java指令碼
- MySQL傳輸表空間小結(r12筆記第2天)MySql筆記
- ORACLE啟動過程淺析Oracle
- MYSQL Slave開機啟動指令碼MySql指令碼
- MySQL自增列的重複值問題(r12筆記第25天)MySql筆記
- MySQL無法建立表的問題分析(r12筆記第73天)MySql筆記
- 第 57 期 sync/semaphore 原始碼淺析原始碼
- JS指令碼非同步載入淺析JS指令碼非同步
- 使用pt工具檢測MySQL主從延遲(r12筆記第7天)MySql筆記
- 分分鐘搭建MySQL一主多從環境(r12筆記第31天)MySql筆記
- 《SharedPreferences的使用及原始碼淺析》讀書筆記原始碼筆記
- Android Service生命週期淺析Android
- MySQL Replication淺析MySql
- 相同update語句在MySQL,Oracle的不同表現(r12筆記第30天)MySqlOracle筆記
- 分分鐘搭建MySQL Group Replication測試環境(二)(r12筆記第41天)MySql筆記
- MySQL 多例項啟動和關閉指令碼MySql指令碼
- 歸零的心態(r12筆記第82天)筆記
- mysqlpump的效能測試(r12筆記第89天)MySql筆記
- Flutter Android 端啟動流程淺析FlutterAndroid
- Service的啟動、繫結,以及生命週期的筆記筆記
- service mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤MySqlZed
- MySQL binlog相關原始碼淺析MySql原始碼
- MySql(一) 淺析MySql索引MySql索引
- webrtc QOS筆記四 Nack機制淺析Web筆記
- 我爸爸眼中的我(r12筆記第22天)筆記
- 一個IT人和ppt的故事(r12筆記第39天)筆記
- 我的女兒二三事(七)(r12筆記第58天)筆記
- 玩足彩的一點感受(r12筆記第80天)筆記
- 記windows自定義bat指令碼自啟動WindowsBAT指令碼
- 淺析Android Activity的啟動過程Android