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 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit