首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

OneSQL/MySQL 單實例啟停腳本:支援 start/stop/restart/status 完整版

     編輯:MySQL 綜合教學

OneSQL/MySQL 單實例啟停腳本:支援 start/stop/restart/status 完整版

生產環境常需將 MySQL/OneSQL 註冊為系統服務,統一管理啟停、狀態查詢。本文提供一個健壯的 /etc/init.d/onesql 腳本,僅需修改三個路徑變數即可適配任意單實例部署。

腳本特性

  • 支援 start|stop|restart|status 四大指令。
  • 自動偵測進程狀態,避免重複啟動/停止。
  • status 顯示進程樹、連接測試、版本、運行時間等關鍵指標。
  • 兼容標準 service 與 systemctl 呼叫。

使用示例

# service onesql5.6.26 {start|stop|restart|status}
service onesql5.6.26 status
# There is no mysqld process !

service onesql5.6.26 start
# Starting MySQL.. SUCCESS!

service onesql5.6.26 status
# MySQL(pid=3163) Status
# Uptime: 5 sec, Threads: 4, QPS: 1.000

service onesql5.6.26 stop
# Stopping MySQL SUCCESS!

完整腳本內容(/etc/init.d/onesql5.6.26)

#!/bin/sh
# === 請依實際環境修改以下三個路徑 ===
MYSQL_HOME=/usr/local/onesql5.6          # 安裝根目錄
datadir=/data/mysql/mysql_3307/data      # 資料目錄
mysql_cnf="/data/mysql/mysql_3307/my_3307.cnf"  # 配置檔
mysql_sock="/tmp/mysql_3307.sock"        # Socket 檔

start() {
    mysqld_pid=$(ps -ef | grep mysqld | grep "$mysql_sock" | grep -vE 'grep|mysqld_safe' | awk '{print $2}')
    if [ "0" = "${mysqld_pid}0" ]; then
        $MYSQL_HOME/bin/mysqld_safe --defaults-file="$mysql_cnf" --user=mysql --datadir="$datadir" --basedir="$MYSQL_HOME" &
        sleep 1
        pppct="."
        while true; do
            mysqld_pid=$(ps -ef | grep mysqld | grep "$mysql_sock" | grep -vE 'grep|mysqld_safe' | awk '{print $2}')
            if [ "${mysqld_pid}0" -gt 1 ]; then
                echo "Starting MySQL${pppct} SUCCESS!"
                break
            fi
            echo "Starting MySQL${pppct}"
            pppct="${pppct}."
            sleep 1
        done
    else
        echo "A mysqld process already exists! pid:$mysqld_pid"
    fi
}

stop() {
    mysqld_pid=$(ps -ef | grep mysqld | grep "$mysql_sock" | grep -vE 'grep|mysqld_safe' | awk '{print $2}')
    if [ "0" = "${mysqld_pid}0" ]; then
        echo "The mysqld process is already stopped!"
    else
        $MYSQL_HOME/bin/mysqladmin -S "$mysql_sock" shutdown &
        sleep 2
        pppct="."
        while true; do
            mysqld_pid=$(ps -ef | grep mysqld | grep "$mysql_sock" | grep -vE 'grep|mysqld_safe' | awk '{print $2}')
            if [ "${mysqld_pid}0" = "0" ]; then
                echo "Stopping MySQL${pppct} SUCCESS!"
                break
            fi
            echo "Stopping MySQL${pppct}"
            pppct="${pppct}."
            sleep 1
        done
    fi
}

status() {
    mysqld_pid=$(ps -ef | grep mysqld | grep "$mysql_sock" | grep -vE 'grep|mysqld_safe' | awk '{print $2}')
    if [ "0" = "${mysqld_pid}0" ]; then
        echo "There is no mysqld process!"
    else
        echo
        ps -ef | grep mysqld | grep "$mysql_cnf" | grep -v grep
        echo "MySQL(pid=$mysqld_pid) Status"
        $MYSQL_HOME/bin/mysql -S "$mysql_sock" -e "\s;"
        echo
    fi
}

case "$1" in
    start) start ;;
    stop)  stop ;;
    status) status ;;
    restart) stop; start ;;
    *) echo "Usage: sh $0 {start|stop|restart|status}" ;;
esac
exit 0

部署步驟

  1. 存為 /etc/init.d/onesql5.6.26,chmod +x。
  2. 修改腳本頂部三個路徑變數(MYSQL_HOME、datadir、mysql_cnf、mysql_sock)。
  3. chkconfig --add onesql5.6.26 加入開機自啟(SysVinit);systemd 環境建議改寫為 .service unit。

多實例擴展提示

若同機器跑多實例,建議:

  • 每實例獨立 datadir、socket、port、my.cnf。
  • 腳本以 port 或 socket 為唯一識別傳參,或複製多份腳本分別命名 onesql_3306、onesql_3307。

標準化啟停腳本能減少人為操作失誤,配合監控系統自動拉起,是資料庫運維自動化的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved