1. 程式人生 > >老鳥帶你開發專業規範的MySQL啟動腳本

老鳥帶你開發專業規範的MySQL啟動腳本

shell編程 老男孩

每一個合格的Linux運維人員都應該做到熟練或精通Shell腳本編程,因為Shell腳本語言差不多是所有編程語言裏最簡單的語言,如果Shell腳本不行,意味著運維之路可能還沒開始就將要終結。——老男孩老師

#!/bin/bash
# chkconfig: 2345 64 36 #配置系統自啟動
# description: A very fast and reliable SQL database engine.
##############################################################
# File Name: mysqld
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu.com
# Created Time : 2018-06-05 08:58:19
##############################################################
#引入系統函數庫
. /etc/init.d/functions

#基礎路徑定義
basedir=/application/mysql
bindir=/application/mysql/bin
lockdir='/var/lock/subsys'                                       
lock_file_path="$lockdir/mysql"
mysqld_pid_file_path=$basedir/data/`uname -n`.pid

#成功提示函數
log_success_msg(){
    #action為特殊的提示函數,$@為所有參數。
    action "SUCCESS! $@" /bin/true
}
#失敗提示函數
log_failure_msg(){
    action  "ERROR! $@" /bin/false
  }
  
#mysql啟動函數
start(){
    echo $"Starting MySQL"
    #測試mysqld_safe是否可執行
    if test -x $bindir/mysqld_safe
    then
        #後臺執行啟動mysql命令
        $bindir/mysqld_safe &>/dev/null &
        #獲取返回值
        retval=$?
        #判斷返回值是否為0
        if [ $retval -eq 0 ]
        then
            #調用成功提示函數。
            log_success_msg "mysql Startup"
            if test -w "$lockdir" #判斷鎖目錄是否可寫。
            then
                touch "$lock_file_path" #創建鎖文件。
            fi
            return $retval #給返回值是專業的表現。
        else
            log_failure_msg "MySQL Startup" #調用失敗函數提示。
            return $retval
        fi
    else
        log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
    fi
}
#停止MySQL函數。
stop(){
    #判斷mysql pid file大小是否為0。
    if test -s "$mysqld_pid_file_path"
    then
        #讀取pidfile
        mysqld_pid=`cat "$mysqld_pid_file_path"`
        #判斷mysql pid對應的進程是否存在。
        if (kill -0 $mysqld_pid 2>/dev/null)
        then
            echo $"Shutting down MySQL"
            kill $mysqld_pid #停止MySQL命令。
            retval=$?
            if [ $retval -eq 0 ]
            then
                log_success_msg "MySQL Stop" #調用停止成功函數。
                if test -f "$lock_file_path"
                then
                    rm -f "$lock_file_path"  #刪除鎖文件。
                fi
                return $retval
            else
                log_failure_msg "MySQL Stop."
                return $retval
            fi
        else
            log_failure_msg "MySQL server process mysqld_pid is not running!"
            rm "$mysqld_pid_file_path"
        fi  
    else
        log_failure_msg "MySQL server PID file is null or not exist!"
    fi
}
#接收傳參判斷並執行相應函數。
case "$1" in
    start)
        start
        retval=$?
        ;;
    stop)
        stop
        retval=$?
        ;;
    restart)
        stop
        sleep 2 #這裏很重要,要休息一下。
        start
        retval=$?
        ;;
    *)
        echo $"Usage:$0 {start|stop|restart}"
        exit 2
esac
exit $retval    #執行腳本後,有返回值才更專業。
國內最佳Shell編程實戰圖書,《跟老男孩學習Linux運維:Shell編程實戰》,京東有售。

老鳥帶你開發專業規範的MySQL啟動腳本