#!/bin/bash # ═══════════════════════════════════════════════════════════════ # mysql_toggle.sh - MySQL 按需启停工具(P2-8) # # 注意:仅建议在「采集器已切换为 launchd 批处理模式」(P2-7)后使用, # 因为常驻采集器 / App 同步功能需要 MySQL 在线。批处理模式下采集是 # 短时任务,可在采集前 start、采集后 stop,空闲时段 MySQL 不驻留。 # # 用法: # mysql_toggle.sh start 启动 MySQL(brew services 或 mysql.server) # mysql_toggle.sh stop 停止 MySQL # mysql_toggle.sh status 查看状态 # ═══════════════════════════════════════════════════════════════ set -u CMD="${1:-status}" # 优先 brew services(macOS 常见安装方式) brew_manage() { if command -v brew >/dev/null 2>&1; then brew services "$1" mysql 2>/dev/null return $? fi return 1 } # 回退 mysql.server(手动安装/端口安装) mysqlserver_manage() { local MYSQL_SERVER for c in /usr/local/mysql/bin/mysql.server /opt/homebrew/opt/mysql/bin/mysql.server; do if [ -x "$c" ]; then MYSQL_SERVER="$c"; break; fi done if [ -n "${MYSQL_SERVER:-}" ]; then "$MYSQL_SERVER" "$1" return $? fi return 1 } case "$CMD" in start|stop) echo "[mysql-toggle] $CMD ..." if brew_manage "$CMD"; then echo "[mysql-toggle] brew services $CMD ok" elif mysqlserver_manage "$CMD"; then echo "[mysql-toggle] mysql.server $CMD ok" else echo "[mysql-toggle] 无法自动管理 MySQL,请手动启停" >&2 exit 1 fi ;; status) if command -v mysqladmin >/dev/null 2>&1 && mysqladmin ping >/dev/null 2>&1; then echo "MySQL: 运行中" else echo "MySQL: 未运行" fi ;; *) echo "用法: mysql_toggle.sh {start|stop|status}" exit 1 ;; esac