單機部署多個 MySQL 版本(如 5.5 與 5.6)時,需獨立管理各實例的啟動、停止與狀態檢測。以下腳本採用端口檢測進程 PID,避免誤殺,並提供彩色狀態輸出,適合生產環境納入監控或手動運維。
/usr/local/mysql5,端口 3306,配置文件 /etc/my.cnf/usr/local/mysql,端口 3307,配置文件 /etc/my6.cnf#!/bin/bash
# author: Wang Xiaoqiang
# func: Start MySQL 5.5
# 檢測 3306 端口是否已被佔用
pid=$(netstat -lnpt | awk -F '[ /]+' '/3306/ {print $7}')
if [ -n "$pid" ]; then
echo -e "\e[1;31mMySQL 5.5 Is Running... (PID: $pid)\e[0m"
exit 0
fi
# 啟動實例
/usr/local/mysql5/bin/mysqld_safe --defaults-file=/etc/my.cnf >/dev/null 2>&1 &
# 結果判斷
if [ $? -eq 0 ]; then
echo -e "\e[1;32mMySQL 5.5 Start Success.\e[0m"
else
echo -e "\e[1;31mMySQL 5.5 Start Failed.\e[0m"
fi
#!/bin/bash
# author: Wang Xiaoqiang
# func: Start MySQL 5.6
pid=$(netstat -lnpt | awk -F '[ /]+' '/3307/ {print $7}')
if [ -n "$pid" ]; then
echo -e "\e[1;31mMySQL 5.6 Is Running... (PID: $pid)\e[0m"
exit 0
fi
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my6.cnf >/dev/null 2>&1 &
if [ $? -eq 0 ]; then
echo -e "\e[1;32mMySQL 5.6 Start Success.\e[0m"
else
echo -e "\e[1;31mMySQL 5.6 Start Failed.\e[0m"
fi
#!/bin/bash
# author: Wang Xiaoqiang
# func: Stop MySQL 5.5
pid=$(netstat -lnpt | awk -F '[ /]+' '/3306/ {print $7}')
if [ -z "$pid" ]; then
echo -e "\e[1;31mMySQL 5.5 Is Not Running...\e[0m"
exit 0
fi
kill $pid >/dev/null 2>&1
# 再次檢測確認進程是否已退出
if [ -z "$(netstat -lnpt | awk -F '[ /]+' '/3306/ {print $7}')" ]; then
echo -e "\e[1;32mMySQL 5.5 Stop Success.\e[0m"
else
echo -e "\e[1;31mMySQL 5.5 Stop Failed.\e[0m"
fi
#!/bin/bash
# author: Wang Xiaoqiang
# func: Stop MySQL 5.6
pid=$(netstat -lnpt | awk -F '[ /]+' '/3307/ {print $7}')
if [ -z "$pid" ]; then
echo -e "\e[1;31mMySQL 5.6 Is Not Running...\e[0m"
exit 0
fi
kill $pid >/dev/null 2>&1
if [ -z "$(netstat -lnpt | awk -F '[ /]+' '/3307/ {print $7}')" ]; then
echo -e "\e[1;32mMySQL 5.6 Stop Success.\e[0m"
else
echo -e "\e[1;31mMySQL 5.6 Stop Failed.\e[0m"
fi
chmod +x start_mysql55.sh stop_mysql55.sh start_mysql56.sh stop_mysql56.shsystemctl start mysql55 統一管理。mysqladmin ping 驗證服務真正就緒,而非僅端口監聽。/var/log/mysql/ 便於審計。