SOURCES (MYSQL_4_1): mysql.init - merge from head

arekm arekm at pld-linux.org
Mon Feb 20 11:17:01 CET 2006


Author: arekm                        Date: Mon Feb 20 10:17:00 2006 GMT
Module: SOURCES                       Tag: MYSQL_4_1
---- Log message:
- merge from head

---- Files affected:
SOURCES:
   mysql.init (1.85 -> 1.85.2.1) 

---- Diffs:

================================================================
Index: SOURCES/mysql.init
diff -u SOURCES/mysql.init:1.85 SOURCES/mysql.init:1.85.2.1
--- SOURCES/mysql.init:1.85	Sun Jul 10 02:00:01 2005
+++ SOURCES/mysql.init	Mon Feb 20 11:16:55 2006
@@ -63,6 +63,8 @@
 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 @@
 #
 # 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 @@
 	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 @@
 # 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 @@
 	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 @@
 	;;
   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 @@
 	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 $?
 	;;
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/mysql.init?r1=1.85&r2=1.85.2.1&f=u



More information about the pld-cvs-commit mailing list