mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			151 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
 | 
						|
# This file is public domain and comes with NO WARRANTY of any kind
 | 
						|
#
 | 
						|
# scripts to start the MySQL demon and restart it if it dies unexpectedly
 | 
						|
#
 | 
						|
# This should be executed in the MySQL base directory if you are using a
 | 
						|
# binary installation that has other paths than you are using.
 | 
						|
#
 | 
						|
# mysql.server works by first doing a cd to the base directory and from there
 | 
						|
# executing mysqld_safe
 | 
						|
 | 
						|
# Check if we are starting this relative (for the binary release)
 | 
						|
if test -f ./data/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \
 | 
						|
 -x ./bin/mysqld
 | 
						|
then
 | 
						|
  MY_BASEDIR_VERSION=`pwd`		# Where bin, share and data is
 | 
						|
  DATADIR=$MY_BASEDIR_VERSION/data	# Where the databases are
 | 
						|
  ledir=$MY_BASEDIR_VERSION/bin		# Where mysqld are
 | 
						|
# Check if this is a 'moved install directory'
 | 
						|
elif test -f ./var/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \
 | 
						|
 -x ./libexec/mysqld
 | 
						|
then
 | 
						|
  MY_BASEDIR_VERSION=`pwd`		# Where libexec, share and var is
 | 
						|
  DATADIR=$MY_BASEDIR_VERSION/var	# Where the databases are
 | 
						|
  ledir=$MY_BASEDIR_VERSION/libexec	# Where mysqld are
 | 
						|
else
 | 
						|
  MY_BASEDIR_VERSION=/usr/local/mysql
 | 
						|
  DATADIR=/usr/local/mysql/var
 | 
						|
  ledir=/usr/local/mysql/libexec
 | 
						|
fi
 | 
						|
 | 
						|
hostname=`@HOSTNAME@`
 | 
						|
pidfile=$DATADIR/$hostname.pid
 | 
						|
log=$DATADIR/$hostname.log
 | 
						|
err=$DATADIR/$hostname.err
 | 
						|
lockfile=$DATADIR/$hostname.lock
 | 
						|
 | 
						|
#
 | 
						|
# If there exists an old pid file, check if the demon is already running
 | 
						|
# Note: The switches to 'ps' may depend on your operating system
 | 
						|
 | 
						|
if test -f $pidfile
 | 
						|
then
 | 
						|
  PID=`cat $pidfile`
 | 
						|
  if /bin/kill -0 $PID
 | 
						|
  then
 | 
						|
    if /bin/ps -p $PID | grep mysqld > /dev/null
 | 
						|
    then    # The pid contains a mysqld process
 | 
						|
      echo "A mysqld process already exists"
 | 
						|
      echo "A mysqld process already exists at " `date` >> $log
 | 
						|
      exit 1;
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
  rm -f $pidfile
 | 
						|
  if test -f $pidfile
 | 
						|
  then
 | 
						|
    echo "Fatal error: Can't remove the pid file: $pidfile"
 | 
						|
    echo "Fatal error: Can't remove the pid file: $pidfile at " `date` >> $log
 | 
						|
    echo "Please remove it manually and start $0 again"
 | 
						|
    echo "mysqld demon not started"
 | 
						|
    exit 1;
 | 
						|
  fi
 | 
						|
fi
 | 
						|
 | 
						|
echo "Starting mysqld demon with databases from $DATADIR"
 | 
						|
 | 
						|
#Default communication ports
 | 
						|
#MYSQL_TCP_PORT=3306
 | 
						|
if test -z "$MYSQL_UNIX_PORT"
 | 
						|
then
 | 
						|
  MYSQL_UNIX_PORT="/tmp/mysql.sock"
 | 
						|
  export MYSQL_UNIX_PORT    
 | 
						|
fi
 | 
						|
#export MYSQL_TCP_PORT
 | 
						|
 | 
						|
# Does this work on all systems?
 | 
						|
#if type ulimit | grep "shell builtin" > /dev/null
 | 
						|
#then
 | 
						|
#  ulimit -n 256 > /dev/null 2>&1		# Fix for BSD and FreeBSD systems
 | 
						|
#fi
 | 
						|
 | 
						|
echo "mysqld started on " `date` >> $log
 | 
						|
bin/zap -f $lockfile < /dev/null > /dev/null 2>&1
 | 
						|
rm -f $lockfile
 | 
						|
$MY_BASEDIR_VERSION/bin/watchdog_mysqld $lockfile $pidfile $MY_BASEDIR_VERSION/bin $DATADIR 3 10 >> $err 2>&1 &
 | 
						|
restart_pid=$!
 | 
						|
 | 
						|
while true
 | 
						|
do
 | 
						|
  rm -f $MYSQL_UNIX_PORT $pidfile	# Some extra safety
 | 
						|
  lockfile -1 -r10 $lockfile >/dev/null 2>&1
 | 
						|
  if test "$#" -eq 0
 | 
						|
  then
 | 
						|
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
 | 
						|
     --skip-locking >> $err 2>&1 &
 | 
						|
  else
 | 
						|
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
 | 
						|
     --skip-locking "$@" >> $err 2>&1 &
 | 
						|
  fi
 | 
						|
  pid=$!
 | 
						|
  rm -f $lockfile
 | 
						|
  wait $pid;
 | 
						|
 | 
						|
  lockfile -1 -r10 $lockfile >/dev/null 2>&1
 | 
						|
  rm -f $lockfile
 | 
						|
  if test ! -f $pidfile			# This is removed if normal shutdown
 | 
						|
  then
 | 
						|
    break;
 | 
						|
  fi
 | 
						|
  if true
 | 
						|
  then
 | 
						|
    # Test if one proces was hanging.
 | 
						|
    # This is only a fix for Linux (running as base 3 mysqld processes)
 | 
						|
    # but should work for the rest of the servers.
 | 
						|
    # The only thing is ps x => redhat 5 gives warnings when using ps -x.
 | 
						|
    # kill -9 is used or the proces won't react on the kill.
 | 
						|
    numofproces=`ps x | grep -v "grep" | grep -c $ledir/mysqld`
 | 
						|
    echo -e "\nNumber of processes running now: $numofproces" | tee -a $log
 | 
						|
    I=1
 | 
						|
    while test "$I" -le "$numofproces"
 | 
						|
    do 
 | 
						|
      PROC=`ps x | grep $ledir/mysqld | grep -v "grep" | tail -1` 
 | 
						|
	for T in $PROC
 | 
						|
	do
 | 
						|
	  break
 | 
						|
	done
 | 
						|
	#    echo "TEST $I - $T **"
 | 
						|
	if kill -9 $T
 | 
						|
	then
 | 
						|
	  echo "mysqld proces hanging, pid $T - killed" | tee -a $log
 | 
						|
	else 
 | 
						|
	  break
 | 
						|
	fi
 | 
						|
	I=`expr $I + 1`
 | 
						|
    done
 | 
						|
  fi
 | 
						|
  echo "mysqld restarted" | tee -a $log
 | 
						|
  # Check all tables and repair any wrong tables.
 | 
						|
  $MY_BASEDIR_VERSION/bin/isamchk -sf $DATADIR/*/*.ISM >> $err 2>&1
 | 
						|
done
 | 
						|
if test $restart_pid -gt 0
 | 
						|
then
 | 
						|
  kill $restart_pid > /dev/null 2>&1
 | 
						|
  sleep 1;
 | 
						|
  kill -9 $restart_pid > /dev/null 2>&1
 | 
						|
fi
 | 
						|
 | 
						|
echo -n "mysqld ended on " `date` >> $log
 | 
						|
echo "mysqld demon ended"
 |