What you do when you’re fed up with a script? Right, you write your own.
You’ll have to excuse me for the long shell script you’ll find here below, but I’m not going to bother putting it on some download website.
It’s a shell script which starts and stops the MySQL server. Indeed, a replacement for the init.d
script found in the MySQL distributions. I’m using it personally on my Macs and it’s not supported in any way.
But why?
Well, I’m playing with MySQL Workbench, Server Administration. The MySQL init.d
script didn’t work right away (oh, various reasons for that), so I used mine. So I figured it might be useful for others and it’s not complicated or shocking-new-stuff. If you want to use it, you’ll have to edit the 2 variables at the top. It’s only going to work on MacOS X.
#!/bin/bash
# Author: Geert Vanderkelen <geert@vanderkelen.org>
BASEDIR="/opt/mysql/mysql"
CNF="/opt/mysql/my51.cnf"
MODE="$1"
_RETURN="" # for returning from functions
pidof() {
local CMD=$1
local PID=`ps cax -o "pid,command" | awk -v cmd="$CMD" '{ if (\$2 == cmd) printf("%s",\$1) }'`
if [ "x$PID" == "x" ]; then
_RETURN=""
return 1
else
_RETURN=$PID
return 0
fi
}
checkprocess() {
local CMD=$1
_RETURN=""
pidof $CMD
if [ $? -eq 0 ];
then
local PID=${_RETURN}
kill -n 0 $PID 2>/dev/null 1>&2
if [ $? -ne 0 ]; then
return 2
fi
_RETURN=$PID
return 0
fi
return 1
}
waituntildown() {
local CMD=$1
pidof $CMD
while [ $? -eq 0 ]; do
echo -n '.'
sleep 1
pidof $CMD
done
}
exec_mysqld_safe() {
(
cd $BASEDIR
./bin/mysqld_safe --defaults-file=$CNF 2>/dev/null 1>&2 </dev/null &
)
}
status() {
checkprocess mysqld
RET=$?
if [ $RET -ne 0 ]; then
if [ $RET -eq 1 ]; then
echo "MySQL is not running."
elif [ $RET -eq 2 ]; then
echo "You have no permission to stop MySQL."
fi
return 1
fi
return 0
}
start() {
checkprocess mysqld
if [ $? -eq 0 ]; then
echo "MySQL is running."
exit 1
fi
echo -n "Starting MySQL.. "
exec_mysqld_safe
sleep 2
checkprocess mysqld
if [ $? -ne 0 ]; then
echo " Failed!"
exit 1
fi
echo " OK"
}
stop() {
status
RET=$?
if [ $RET -ne 0 ]; then
exit 1
fi
PID=${_RETURN}
echo -n "Stopping MySQL.. "
kill $PID 2>/dev/null 1>&2
if [ $? -eq 0 ]; then
waituntildown mysqld
echo " OK"
else
echo " Failed!"
fi
}
case "$MODE" in
"start")
start
;;
"stop")
stop
;;
"restart")
stop
start
;;
"status")
status
if [ $? -eq 0 ]; then
echo "MySQL is running."
exit 0
else
exit 1
fi
;;
"getpid")
pidof mysqld
if [ $? -eq 0 ]; then
echo ${_RETURN}
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status|getpid}"
exit 1
;;
esac
Comments
I found your script here and thought it might be the answer to my problem. Seeing your explanation that it is meant to replace the preinstalled mysql “init.d” file, I did a search of my hard drive for init.d using Terminal as a super user and found no init.d file in the MySQL installation.
What do I do then, to make it start at system startup?
My script wasn't meant to be used with the MySQL Mac OS distribution.
Did you install the additional Startup Item, it is explained in the MySQL manual in section Installing the MySQL Startup Item. I hope that solves it for you.