#!/bin/sh # # MySQL daemon start/stop script. # # Debian version. Based on the original by TcX. # set -e set -u ${DEBIAN_SCRIPT_DEBUG:+ set -v -x} test -x /usr/sbin/mysqld || exit 0 SELF=$(cd $(dirname $0); pwd -P)/$(basename $0) CONF=/etc/mysql/my.cnf MYADMIN="/usr/bin/mysqladmin --defaults-extra-file=/etc/mysql/debian.cnf" set +e # for deinstalling with deleted configs ERRLOG=`perl -n -e '/^err-log[^=]*=\s*(.*)/ && { print $1 }' < $CONF` set -e ERRLOG=${ERRLOG:-/var/log/mysql/mysql.err} # Safeguard (relative paths, core dumps..) cd / umask 077 export PATH=/bin:/usr/bin # mysqladmin likes to read /root/.my.cnf. This is usually not what I want # as many admins e.g. only store a password without a username there and # so break my scripts. export HOME=/etc/mysql/ # "if" considers exit(0) as true so we can just pass mysqladmins exit code here. # If mysqladmin does not exist the return code will be silently set to !0, too. is_mysqld_alive () { s=`$MYADMIN ping 2>&1`; rc=$? if [ $rc != 0 ]; then (echo "`date +'%y%m%d %H:%M:%S'` Error at $0\n$s") >> $ERRLOG fi return $rc } case "${1:-''}" in 'start') # check for config file if [ ! -r /etc/mysql/my.cnf ]; then echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian." fi # Start daemon echo -n "Starting MySQL database server: mysqld" /usr/bin/mysqld_safe > /dev/null 2>&1 & for i in 1 2 3 4 5 6; do if is_mysqld_alive; then break; fi sleep 1 done if is_mysqld_alive; then echo "." else echo "...failed." /bin/echo -e "\tPlease take a look at $ERRLOG" fi ;; 'stop') # * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible # at least for cron, we can rely on it here, too. (although we have # to specify it explicit as e.g. sudo environments points to the normal # users home and not /root) echo -n "Stopping MySQL database server: mysqld" if is_mysqld_alive; then set +e $MYADMIN shutdown r=$? set -e if [ "$r" -ne 0 ]; then echo "...failed" echo -n "Killing MySQL database server by signal: mysqld" killall -15 mysqld server_down= for i in 1 2 3 4 5 6 7 8 9 10; do sleep 1 if is_mysqld_alive; then : ; else server_down=1; break; fi done if -z "$server_down"; then killall -9 mysqld; fi fi fi if is_mysqld_alive; then echo "...failed." echo "Please stop the daemon yourself!" exit -1 else echo "." fi ;; 'restart') set +e; $SELF stop; set -e $SELF start ;; 'reload'|'force-reload') echo -n "Reloading MySQL database server: mysqld" $MYADMIN reload echo "." ;; 'status') $MYADMIN version ;; *) echo "Usage: $SELF start|stop|restart|reload|force-reload" exit 1 ;; esac