vim /etc/init.d/mysql

#!/bin/bash
#2019-02-12


basedir=/usr/local/mysql57
bindir=/usr/local/mysql57/bin
datadir=/data/public/mysql/23306
lockdir='/data/public/mysql/23306/run'
lock_file_path="lockdir/23306.sock.lock"
mysqld_pid_file_path=datadir/run/23306.pid
service_startup_timeout=900




if test -z "basedir"
then
  basedir=@prefix@
  bindir=@bindir@
  if test -z "datadir"
  then
    datadir=@localstatedir@
  fi
  sbindir=@sbindir@
  libexecdir=@libexecdir@
else
  bindir="basedir/bin"
  if test -z "datadir"
  then
    datadir="basedir/data"
  fi
  sbindir="basedir/sbin"
  libexecdir="basedir/libexec"
fi

# datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set=

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -flsb_functions ; then
  . lsb_functions
else
  log_success_msg()
  {
    echo " SUCCESS!@"
  }
  log_failure_msg()
  {
    echo " ERROR! @"
  }
fi

PATH="/sbin:/usr/sbin:/bin:/usr/bin:basedir/bin"
export PATH

mode=1    # start or stop

[# -ge 1 ] && shift


other_args="*"   # uncommon, but needed when called from an RPM upgrade action
           # Expected: "--skip-networking --skip-grant-tables"
           # They are not checked here, intentionally, as it is the resposibility
           # of the "spec" file author to give correct arguments only.

case `echo "testing\c"`,`echo -n testing` in
    *c*,-n*) echo_n=   echo_c=     ;;
    *c*,*)   echo_n=-n echo_c=     ;;
    *)       echo_n=   echo_c='\c' ;;
esac

parse_server_arguments() {
  for arg do
    case "arg" in
      --basedir=*)  basedir=`echo "arg" | sed -e 's/^[^=]*=//'`
                    bindir="basedir/bin"
            if test -z "datadir_set"; then
              datadir="basedir/data"
            fi
            sbindir="basedir/sbin"
            libexecdir="basedir/libexec"
        ;;
      --datadir=*)  datadir=`echo "arg" | sed -e 's/^[^=]*=//'`
            datadir_set=1
    ;;
      --pid-file=*) mysqld_pid_file_path=`echo "arg" | sed -e 's/^[^=]*=//'` ;;
      --service-startup-timeout=*) service_startup_timeout=`echo "arg" | sed -e 's/^[^=]*=//'` ;;
    esac
  done
}

wait_for_pid () {
  verb="1"           # created | removed
  pid="2"            # process ID of the program operating on the pid-file
  pid_file_path="3" # path to the PID file.

  i=0
  avoid_race_condition="by checking again"

  while test i -neservice_startup_timeout ; do

    case "verb" in
      'created')
        # wait for a PID-file to pop into existence.
        test -s "pid_file_path" && i='' && break
        ;;
      'removed')
        # wait for this PID-file to disappear
        test ! -s "pid_file_path" && i='' && break
        ;;
      *)
        echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
        exit 1
        ;;
    esac

    # if server isn't running, then pid-file will never be updated
    if test -n "pid"; then
      if kill -0 "pid" 2>/dev/null; then
        :  # the server still runs
      else
        # The server may have exited between the last pid-file check and now.         if test -n "avoid_race_condition"; then
          avoid_race_condition=""
          continue  # Check again.
        fi

        # there's nothing that will affect the file.
        log_failure_msg "The server quit without updating PID file (pid_file_path)."
        return 1  # not waiting any more.
      fi
    fi

    echoecho_n ".echo_c"
    i=`expri + 1`
    sleep 1

  done

  if test -z "i" ; then
    log_success_msg
    return 0
  else
    log_failure_msg
    return 1
  fi
}

# Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x "bindir/my_print_defaults";  then
  print_defaults="bindir/my_print_defaults"
else
  # Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -rconf
  then
    subpat='^[^=]*basedir[^=]*=\(.*\)'
    dirs=`sed -e "/subpat/!d" -e 's//\1/' conf`
    for d indirs
    do
      d=`echo d | sed -e 's/[  ]//g'`
      if test -x "d/bin/my_print_defaults"
      then
        print_defaults="d/bin/my_print_defaults"
        break
      fi
    done
  fi

  # Hope it's in the PATH ... but I doubt it
  test -z "print_defaults" && print_defaults="my_print_defaults"
fi

#
# Read defaults file from 'basedir'.   If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
#

extra_args=""
if test -r "basedir/my.cnf"
then
  extra_args="-ebasedir/my.cnf"
fi

parse_server_arguments `print_defaultsextra_args mysqld server mysql_server mysql.server`

#
# Set pid file if not given
#
if test -z "mysqld_pid_file_path"
then
  mysqld_pid_file_path=datadir/run/23306.pid
else
  case "mysqld_pid_file_path" in
    /* ) ;;
    * )  mysqld_pid_file_path="datadir/mysqld_pid_file_path" ;;
  esac
fi

case "mode" in
  'start')
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd basedir

    echoecho_n "Starting MySQL"

    if test -x bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      /usr/local/mysql57/bin/mysqld --defaults-file=/data/public/mysql/23306/run/23306.cnf >/dev/null &
      #bindir/mysqld_safe --datadir="datadir" --pid-file="mysqld_pid_file_path" other_args >/dev/null &
      wait_for_pid created "!" "mysqld_pid_file_path"; return_value=?

      # Make lock for RedHat / SuSE
      if test -w "lockdir"
      then
        touch "lock_file_path"
      fi

      exit return_value
    else
      log_failure_msg "Couldn't find MySQL server (bindir/mysqld_safe)"
    fi
    ;;

  'stop')
    # Stop daemon. We use a signal here to avoid having to know the
    # root password.

    if test -s "mysqld_pid_file_path"
    then
      # signal mysqld_safe that it needs to stop
      touch "mysqld_pid_file_path.shutdown"

      mysqld_pid=`cat "mysqld_pid_file_path"`

      if (kill -0mysqld_pid 2>/dev/null)
      then
        echo echo_n "Shutting down MySQL"
        killmysqld_pid
        # mysqld should remove the pid file when it exits, so wait for it.
        wait_for_pid removed "mysqld_pid" "mysqld_pid_file_path"; return_value=?
      else
        log_failure_msg "MySQL server process #mysqld_pid is not running!"
        rm "mysqld_pid_file_path"
      fi

      # Delete lock for RedHat / SuSE
      if test -f "lock_file_path"
      then
        rm -f "lock_file_path"
      fi
      exitreturn_value
    else
      log_failure_msg "MySQL server PID file could not be found!"
    fi
    ;;

  'restart')
    # Stop the service and regardless of whether it was
    # running or not, start it again.
    if 0 stopother_args; then
      0 startother_args
    else
      log_failure_msg "Failed to stop running server, so refusing to try to start."
      exit 1
    fi
    ;;

  'reload'|'force-reload')
    if test -s "mysqld_pid_file_path" ; then
      read mysqld_pid< "mysqld_pid_file_path"
      kill -HUP mysqld_pid && log_success_msg "Reloading service MySQL"
      touch "mysqld_pid_file_path"
    else
      log_failure_msg "MySQL PID file could not be found!"
      exit 1
    fi
    ;;
  'status')
    # First, check to see if pid file exists
    if test -s "mysqld_pid_file_path" ; then      read mysqld_pid<"mysqld_pid_file_path"
      if kill -0 mysqld_pid 2>/dev/null ; then        log_success_msg "MySQL running (mysqld_pid)"
        exit 0
      else
        log_failure_msg "MySQL is not running, but PID file exists"
        exit 1
      fi
    else
      # Try to find appropriate mysqld process
      mysqld_pid="/data/public/mysql/23306/run/23306.pid"

      # test if multiple pids exist
      pid_count=`echo mysqld_pid | wc -w`
      if testpid_count -gt 1 ; then
        log_failure_msg "Multiple MySQL running but PID file could not be found (mysqld_pid)"
        exit 5
      elif test -zmysqld_pid ; then 
        if test -f "lock_file_path" ; then          log_failure_msg "MySQL is not running, but lock file (lock_file_path) exists"
          exit 2
        fi 
        log_failure_msg "MySQL is not running"
        exit 3
      else
        log_failure_msg "MySQL is running but PID file could not be found"
        exit 4
      fi
    fi
    ;;
    *)
      # usage
      basename=`basename "0"`
      echo "Usage:basename  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]"
      exit 1
    ;;
esac

exit 0

chkconfig mysql on

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code