]> git.pld-linux.org Git - packages/mysql.git/commitdiff
- merge from head
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Mon, 20 Feb 2006 10:16:55 +0000 (10:16 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    mysql.init -> 1.85.2.1

mysql.init

index 598d8fa2bc4b763ebbdc8898e0d445c30b14c1ed..91c54fd517168bef3c277f0d2e3aff148062eefd 100644 (file)
@@ -63,6 +63,8 @@ else
 fi
 
 MYSQL_ERRLOG=/var/log/mysql/err
+MYSQL_START_WAIT_TIME=${MYSQL_START_WAIT_TIME:-15}
+MYSQL_STOP_WAIT_TIME=${MYSQL_STOP_WAIT_TIME:-900}
 
 #
 # Useful functions.
@@ -73,25 +75,59 @@ MYSQL_ERRLOG=/var/log/mysql/err
 #
 # arguments:
 # $1 - db cluster
+# $2 - start|stop
 #
 # sets variables:
-# MYSQL_STATUS = running | not running | died
+# MYSQL_STATUS = starting | running | not running | died
 # MYSQL_PID    = pid of mysqld process
 #
 mysqlstatus() {
        clusterdir="$1"
+       mode="$2"
+       
        mysqlgetconfig "$clusterdir"
 
        MYSQL_STATUS="not running"
        MYSQL_PID="unknown"
+       MYSQL_PIDFILE_PID=""
+       MYSQL_GREP_PID=""
 
-       [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
+       if [ -f "$MYSQL_PIDFILE" ]; then
+               MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
+       fi
+       
+       if [ -n "$MYSQL_PIDFILE_PID" ]; then
+               MYSQL_PID=$MYSQL_PIDFILE_PID
+               if [ ! -d "/proc/$MYSQL_PID" ]; then
+                       MYSQL_STATUS="died"
+                       return
+               elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline); then
+                       MYSQL_STATUS="running"
+                       return
+               fi
+       fi
 
-       if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
-               MYSQL_STATUS="died"
-       elif [ -d "/proc/$MYSQL_PID" ]; then
-               grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
+       if [ "$mode" = "start" ]; then
+               MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline | awk -F "/" '{ print $3; exit; }')
+               if [ -n "$MYSQL_GREP_PID" ]; then
+                       MYSQL_PID=$MYSQL_GREP_PID
+                       if (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline); then
+                               if [ -f "$MYSQL_PIDFILE" ]; then
+                                       MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
+                               fi
+                               if [ -n "$MYSQL_PIDFILE_PID" ]; then
+                                       MYSQL_PID=$MYSQL_PIDFILE_PID
+                                       MYSQL_STATUS="running"
+                                       return
+                               else
+                                       MYSQL_STATUS="starting"
+                                       return
+                               fi
+                       fi
+               fi
        fi
+
+       # else default, "not running"
 }
 
 # get mysql configuration in variables
@@ -194,9 +230,19 @@ mysqlstart() {
        msg_starting "MySQL $clusterdir"
        busy
        [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
+       rm -f "$MYSQL_PIDFILE"
        TMPDIR=/tmp nice -n ${SERVICE_RUN_NICE_LEVEL:-$DEFAULT_SERVICE_RUN_NICE_LEVEL} /usr/bin/setsid /usr/sbin/mysqld --defaults-file=$MYSQL_CONFIG --datadir=$MYSQL_DATA_DIR --pid-file=$MYSQL_PIDFILE >> $MYSQL_ERRLOG 2>&1 &
-       sleep 2
-       mysqlstatus "$clusterdir"
+       sleep 0.2
+       mysqlstatus "$clusterdir" start
+       # it takes longer for mysqld to start and create pidfile if it has to recover innodb transactions
+       if [ "$MYSQL_STATUS" = "starting" ]; then
+               for nr in $(seq 1 $(($MYSQL_START_WAIT_TIME*10))); do
+                       [ -f "$MYSQL_PIDFILE" ] && break
+                       sleep 0.1
+               done
+       fi
+
+       mysqlstatus "$clusterdir" start
        if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
                ok
        elif [ "$MYSQL_STATUS" = "died" ]; then
@@ -211,31 +257,31 @@ mysqlstart() {
 # stop mysql
 mysqlstop() {
        clusterdir="$1"
-       mysqlstatus "$clusterdir"
+       mysqlstatus "$clusterdir" stop
        msg_stopping "MySQL $clusterdir"
        busy
 
        # try graceful shutdown -- send shutdown command
        # requires mysql_logrotate user proper privs
        /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
-       mysqlstatus "$clusterdir"
+       mysqlstatus "$clusterdir" stop
 
-       [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
-       # 15 seconds
-       for nr in $(seq 1 15); do
-               [ -d "/proc/$MYSQL_PID" ] && sleep 1
-       done
-       mysqlstatus "$clusterdir"
+       if [ "$MYSQL_PID" != "unknown" ]; then
+               kill -TERM "$MYSQL_PID" 2> /dev/null
+               for nr in $(seq 1 $(($MYSQL_STOP_WAIT_TIME*10))); do
+                       [ -d "/proc/$MYSQL_PID" ] || break
+                       sleep 0.1
+               done
+       fi
+       
+       mysqlstatus "$clusterdir" stop
        if [ "$MYSQL_STATUS" = "died" ]; then
                died
-       elif [ "$MYSQL_STATUS" = "running" ]; then
+       elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
                fail
        else
                ok
        fi
-
-       # FIXME: should let mysqld remove pid by itself?
-       rm -f "$MYSQL_PIDFILE"
 }
 
 #
@@ -691,7 +737,7 @@ case "$action" in
        chmod 640 $MYSQL_ERRLOG
 
        for mysqldir in $DB_CLUSTERS; do
-               mysqlstatus "$mysqldir"
+               mysqlstatus "$mysqldir" start
                if [ "$MYSQL_STATUS" = "running" ]; then
                        msg_already_running "MySQL $mysqldir"
                else
@@ -702,7 +748,7 @@ case "$action" in
        ;;
   stop)
        for mysqldir in $DB_CLUSTERS; do
-               mysqlstatus "$mysqldir"
+               mysqlstatus "$mysqldir" stop
                if [ "$MYSQL_STATUS" = "not running" ]; then
                        msg_not_running "MySQL $mysqldir"
                else
@@ -715,7 +761,13 @@ case "$action" in
        status mysqld
        for mysqldir in $DB_CLUSTERS; do
                mysqlstatus "$mysqldir"
-               echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
+               show "MySQL cluster %s" "$mysqldir"
+               if [ "$MYSQL_STATUS" = "running" ]; then
+                       progress "$MYSQL_STATUS"
+               else
+                       progress "$MYSQL_STATUS" "$CFAIL"
+               fi
+               echo
        done
        exit $?
        ;;
This page took 0.034642 seconds and 4 git commands to generate.