mysqld_safe-watch.sh
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/bin/sh
  2. # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
  3. # This file is public domain and comes with NO WARRANTY of any kind
  4. #
  5. # scripts to start the MySQL demon and restart it if it dies unexpectedly
  6. #
  7. # This should be executed in the MySQL base directory if you are using a
  8. # binary installation that has other paths than you are using.
  9. #
  10. # mysql.server works by first doing a cd to the base directory and from there
  11. # executing mysqld_safe
  12. # Check if we are starting this relative (for the binary release)
  13. if test -f ./data/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a 
  14.  -x ./bin/mysqld
  15. then
  16.   MY_BASEDIR_VERSION=`pwd` # Where bin, share and data is
  17.   DATADIR=$MY_BASEDIR_VERSION/data # Where the databases are
  18.   ledir=$MY_BASEDIR_VERSION/bin # Where mysqld are
  19. # Check if this is a 'moved install directory'
  20. elif test -f ./var/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a 
  21.  -x ./libexec/mysqld
  22. then
  23.   MY_BASEDIR_VERSION=`pwd` # Where libexec, share and var is
  24.   DATADIR=$MY_BASEDIR_VERSION/var # Where the databases are
  25.   ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld are
  26. else
  27.   MY_BASEDIR_VERSION=/usr/local/mysql
  28.   DATADIR=/usr/local/mysql/var
  29.   ledir=/usr/local/mysql/libexec
  30. fi
  31. hostname=`@HOSTNAME@`
  32. pidfile=$DATADIR/$hostname.pid
  33. log=$DATADIR/$hostname.log
  34. err=$DATADIR/$hostname.err
  35. lockfile=$DATADIR/$hostname.lock
  36. #
  37. # If there exists an old pid file, check if the demon is already running
  38. # Note: The switches to 'ps' may depend on your operating system
  39. if test -f $pidfile
  40. then
  41.   PID=`cat $pidfile`
  42.   if /bin/kill -0 $PID
  43.   then
  44.     if /bin/ps -p $PID | grep mysqld > /dev/null
  45.     then    # The pid contains a mysqld process
  46.       echo "A mysqld process already exists"
  47.       echo "A mysqld process already exists at " `date` >> $log
  48.       exit 1;
  49.     fi
  50.   fi
  51.   rm -f $pidfile
  52.   if test -f $pidfile
  53.   then
  54.     echo "Fatal error: Can't remove the pid file: $pidfile"
  55.     echo "Fatal error: Can't remove the pid file: $pidfile at " `date` >> $log
  56.     echo "Please remove it manually and start $0 again"
  57.     echo "mysqld demon not started"
  58.     exit 1;
  59.   fi
  60. fi
  61. echo "Starting mysqld demon with databases from $DATADIR"
  62. #Default communication ports
  63. #MYSQL_TCP_PORT=3306
  64. if test -z "$MYSQL_UNIX_PORT"
  65. then
  66.   MYSQL_UNIX_PORT="/tmp/mysql.sock"
  67.   export MYSQL_UNIX_PORT    
  68. fi
  69. #export MYSQL_TCP_PORT
  70. # Does this work on all systems?
  71. #if type ulimit | grep "shell builtin" > /dev/null
  72. #then
  73. #  ulimit -n 256 > /dev/null 2>&1 # Fix for BSD and FreeBSD systems
  74. #fi
  75. echo "mysqld started on " `date` >> $log
  76. bin/zap -f $lockfile < /dev/null > /dev/null 2>&1
  77. rm -f $lockfile
  78. $MY_BASEDIR_VERSION/bin/watchdog_mysqld $lockfile $pidfile $MY_BASEDIR_VERSION/bin $DATADIR 3 10 >> $err 2>&1 &
  79. restart_pid=$!
  80. while true
  81. do
  82.   rm -f $MYSQL_UNIX_PORT $pidfile # Some extra safety
  83.   lockfile -1 -r10 $lockfile >/dev/null 2>&1
  84.   if test "$#" -eq 0
  85.   then
  86.     nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR 
  87.      --skip-locking >> $err 2>&1 &
  88.   else
  89.     nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR 
  90.      --skip-locking "$@" >> $err 2>&1 &
  91.   fi
  92.   pid=$!
  93.   rm -f $lockfile
  94.   wait $pid;
  95.   lockfile -1 -r10 $lockfile >/dev/null 2>&1
  96.   rm -f $lockfile
  97.   if test ! -f $pidfile # This is removed if normal shutdown
  98.   then
  99.     break;
  100.   fi
  101.   if true
  102.   then
  103.     # Test if one proces was hanging.
  104.     # This is only a fix for Linux (running as base 3 mysqld processes)
  105.     # but should work for the rest of the servers.
  106.     # The only thing is ps x => redhat 5 gives warnings when using ps -x.
  107.     # kill -9 is used or the proces won't react on the kill.
  108.     numofproces=`ps x | grep -v "grep" | grep -c $ledir/mysqld`
  109.     echo -e "nNumber of processes running now: $numofproces" | tee -a $log
  110.     I=1
  111.     while test "$I" -le "$numofproces"
  112.     do 
  113.       PROC=`ps x | grep $ledir/mysqld | grep -v "grep" | tail -1` 
  114. for T in $PROC
  115. do
  116.   break
  117. done
  118. #    echo "TEST $I - $T **"
  119. if kill -9 $T
  120. then
  121.   echo "mysqld proces hanging, pid $T - killed" | tee -a $log
  122. else 
  123.   break
  124. fi
  125. I=`expr $I + 1`
  126.     done
  127.   fi
  128.   echo "mysqld restarted" | tee -a $log
  129.   # Check all tables and repair any wrong tables.
  130.   $MY_BASEDIR_VERSION/bin/isamchk -sf $DATADIR/*/*.ISM >> $err 2>&1
  131. done
  132. if test $restart_pid -gt 0
  133. then
  134.   kill $restart_pid > /dev/null 2>&1
  135.   sleep 1;
  136.   kill -9 $restart_pid > /dev/null 2>&1
  137. fi
  138. echo -n "mysqld ended on " `date` >> $log
  139. echo "mysqld demon ended"