164 lines
4.5 KiB
Bash
164 lines
4.5 KiB
Bash
#!/bin/bash
|
|
#
|
|
# mysqld This shell script takes care of starting and stopping
|
|
# the MySQL subsystem (mysqld).
|
|
#
|
|
# chkconfig: - 64 36
|
|
# description: MySQL database server.
|
|
# processname: mysqld
|
|
# config: /etc/my.cnf
|
|
# pidfile: /var/run/mysqld/mysqld.pid
|
|
|
|
# Source function library.
|
|
. /etc/rc.d/init.d/functions
|
|
|
|
# Source networking configuration.
|
|
. /etc/sysconfig/network
|
|
|
|
|
|
prog="MySQL"
|
|
|
|
# extract value of a MySQL option from /etc/my.cnf
|
|
# Usage: get_mysql_option FILE VARNAME DEFAULT
|
|
# result is returned in $result
|
|
# Ugly as this is, it knows nothing of option file sections ...
|
|
get_mysql_option(){
|
|
result=`sed -n "s/^[ \t]*$2[ \t]*=[ \t]*//p" "$1" 2>/dev/null | tail -n 1`
|
|
if [ -z "$result" ]; then
|
|
# not found, use default
|
|
result="$3"
|
|
else
|
|
# found, still have to deal with quoting and end-of-line comments
|
|
dequoted=`echo "$result" | sed "s/^'\([^']*\)'.*$/\1/"`
|
|
if [ x"$dequoted" != x"$result" ]; then
|
|
result="$dequoted"
|
|
else
|
|
dequoted=`echo "$result" | sed 's/^"\([^"]*\)".*$/\1/'`
|
|
if [ x"$dequoted" != x"$result" ]; then
|
|
result="$dequoted"
|
|
else
|
|
result=`echo "$result" | sed 's/^\([^ \t#]*\).*$/\1/'`
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_mysql_option /etc/my.cnf datadir "/var/lib/mysql"
|
|
datadir="$result"
|
|
get_mysql_option /etc/my.cnf socket "$datadir/mysql.sock"
|
|
socketfile="$result"
|
|
get_mysql_option /etc/my.cnf log-error "/var/log/mysqld.log"
|
|
errlogfile="$result"
|
|
get_mysql_option /etc/my.cnf pid-file "/var/run/mysqld/mysqld.pid"
|
|
mypidfile="$result"
|
|
|
|
start(){
|
|
touch "$errlogfile"
|
|
chown mysql:mysql "$errlogfile"
|
|
chmod 0640 "$errlogfile"
|
|
[ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile"
|
|
if [ ! -d "$datadir/mysql" ] ; then
|
|
action $"Initializing MySQL database: " /usr/bin/mysql_install_db
|
|
ret=$?
|
|
chown -R mysql:mysql "$datadir"
|
|
if [ $ret -ne 0 ] ; then
|
|
return $ret
|
|
fi
|
|
fi
|
|
chown mysql:mysql "$datadir"
|
|
chmod 0755 "$datadir"
|
|
# The reason for explicitly specifying --pid-file is that there may
|
|
# be no such entry in my.cnf, and the default behavior will be to not
|
|
# create it at all. Likewise, we specify --log-error in case there
|
|
# was not an entry in my.cnf.
|
|
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file="$mypidfile" --log-error="$errlogfile" >/dev/null 2>&1 &
|
|
ret=$?
|
|
# Spin for a maximum of N seconds waiting for the server to come up.
|
|
# Rather than assuming we know a valid username, accept an "access
|
|
# denied" response as meaning the server is functioning.
|
|
if [ $ret -eq 0 ]; then
|
|
STARTTIMEOUT=30
|
|
while [ $STARTTIMEOUT -gt 0 ]; do
|
|
RESPONSE=`/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping 2>&1` && break
|
|
echo "$RESPONSE" | grep -q "Access denied for user" && break
|
|
sleep 1
|
|
let STARTTIMEOUT=${STARTTIMEOUT}-1
|
|
done
|
|
if [ $STARTTIMEOUT -eq 0 ]; then
|
|
echo "Timeout error occurred trying to start MySQL Daemon."
|
|
action $"Starting $prog: " /bin/false
|
|
ret=1
|
|
else
|
|
action $"Starting $prog: " /bin/true
|
|
fi
|
|
else
|
|
action $"Starting $prog: " /bin/false
|
|
fi
|
|
[ $ret -eq 0 ] && touch /var/lock/subsys/mysqld
|
|
return $ret
|
|
}
|
|
|
|
stop(){
|
|
MYSQLPID=`cat "$mypidfile" 2>/dev/null `
|
|
if [ -n "$MYSQLPID" ]; then
|
|
/bin/kill "$MYSQLPID" >/dev/null 2>&1
|
|
ret=$?
|
|
if [ $ret -eq 0 ]; then
|
|
STOPTIMEOUT=60
|
|
while [ $STOPTIMEOUT -gt 0 ]; do
|
|
/bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
|
|
sleep 1
|
|
let STOPTIMEOUT=${STOPTIMEOUT}-1
|
|
done
|
|
if [ $STOPTIMEOUT -eq 0 ]; then
|
|
echo "Timeout error occurred trying to stop MySQL Daemon."
|
|
ret=1
|
|
action $"Stopping $prog: " /bin/false
|
|
else
|
|
rm -f /var/lock/subsys/mysqld
|
|
rm -f "$socketfile"
|
|
action $"Stopping $prog: " /bin/true
|
|
fi
|
|
else
|
|
action $"Stopping $prog: " /bin/false
|
|
fi
|
|
else
|
|
ret=1
|
|
action $"Stopping $prog: " /bin/false
|
|
fi
|
|
return $ret
|
|
}
|
|
|
|
restart(){
|
|
stop
|
|
start
|
|
}
|
|
|
|
condrestart(){
|
|
[ -e /var/lock/subsys/mysqld ] && restart || :
|
|
}
|
|
|
|
# See how we were called.
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
status)
|
|
status mysqld
|
|
;;
|
|
restart)
|
|
restart
|
|
;;
|
|
condrestart)
|
|
condrestart
|
|
;;
|
|
*)
|
|
echo $"Usage: $0 {start|stop|status|condrestart|restart}"
|
|
exit 1
|
|
esac
|
|
|
|
exit $?
|