生產環境常需將 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!
#!/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
/etc/init.d/onesql5.6.26,chmod +x。MYSQL_HOME、datadir、mysql_cnf、mysql_sock)。chkconfig --add onesql5.6.26 加入開機自啟(SysVinit);systemd 環境建議改寫為 .service unit。若同機器跑多實例,建議:
datadir、socket、port、my.cnf。port 或 socket 為唯一識別傳參,或複製多份腳本分別命名 onesql_3306、onesql_3307。標準化啟停腳本能減少人為操作失誤,配合監控系統自動拉起,是資料庫運維自動化的基石。