mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Merge tsmith.mysql.internal:m/bk/maint/b4858/51
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/51
This commit is contained in:
commit
fece1d6fed
1 changed files with 153 additions and 102 deletions
|
@ -2,16 +2,23 @@
|
|||
# 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 daemon and restart it if it dies unexpectedly
|
||||
# Script to start the MySQL daemon 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.
|
||||
# binary installation that is not installed in its compile-time default
|
||||
# location
|
||||
#
|
||||
# mysql.server works by first doing a cd to the base directory and from there
|
||||
# executing mysqld_safe
|
||||
|
||||
KILL_MYSQLD=1;
|
||||
MYSQLD=
|
||||
niceness=0
|
||||
# Default on, unless --log-err is specified (and before options are parsed)
|
||||
syslog=2
|
||||
user=@MYSQLD_USER@
|
||||
pid_file=
|
||||
err_log=
|
||||
|
||||
trap '' 1 2 3 15 # we shouldn't let anyone kill us
|
||||
|
||||
|
@ -38,6 +45,8 @@ Usage: $0 [OPTIONS]
|
|||
--mysqld-version=VERSION Use "mysqld-VERSION" as mysqld
|
||||
--nice=NICE Set the scheduling priority of mysqld
|
||||
--skip-kill-mysqld Don't try to kill stray mysqld processes
|
||||
--syslog Log messages to syslog with 'logger'
|
||||
--skip-syslog Log messages to error log
|
||||
|
||||
All other options are passed to the mysqld program.
|
||||
|
||||
|
@ -45,6 +54,43 @@ EOF
|
|||
exit 1
|
||||
}
|
||||
|
||||
log_generic () {
|
||||
priority="$1"
|
||||
shift
|
||||
|
||||
msg="`date +'%y%m%d %H:%M:%S'` mysqld_safe $*"
|
||||
echo "$msg"
|
||||
if [ $syslog -eq 0 ]
|
||||
then
|
||||
echo "$msg" >> "$err_log"
|
||||
else
|
||||
logger -i -t mysqld_safe -p "$priority" "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
log_error () {
|
||||
log_generic daemon.error "$@" >&2
|
||||
}
|
||||
|
||||
log_notice () {
|
||||
log_generic daemon.notice "$@"
|
||||
}
|
||||
|
||||
eval_log_error () {
|
||||
cmd="$1"
|
||||
if [ $syslog -eq 0 ]
|
||||
then
|
||||
cmd="$cmd >> "`shell_quote_string "$err_log"`" 2>&1"
|
||||
else
|
||||
# mysqld often (not always) prefixes messages on stdout with a
|
||||
# timestamp in the form of '%y%m%d %H:%M:%S '; this is redundant
|
||||
# when logging via syslog, so strip it
|
||||
cmd="$cmd 2>&1 | sed -e 's/^[0-9]\{6\} [0-9:]\{8\} *//' | logger -i -t mysqld -p daemon.error"
|
||||
fi
|
||||
#echo "Running mysqld: [$cmd]"
|
||||
eval "$cmd"
|
||||
}
|
||||
|
||||
shell_quote_string() {
|
||||
# This sed command makes sure that any special chars are quoted,
|
||||
# so the arg gets passed exactly to the server.
|
||||
|
@ -63,41 +109,41 @@ parse_arguments() {
|
|||
fi
|
||||
|
||||
for arg do
|
||||
val=`echo "$arg" | sed -e "s;--[^=]*=;;"`
|
||||
case "$arg" in
|
||||
--skip-kill-mysqld*)
|
||||
KILL_MYSQLD=0;
|
||||
;;
|
||||
# these get passed explicitly to mysqld
|
||||
--basedir=*) MY_BASEDIR_VERSION=`echo "$arg" | sed -e "s;--basedir=;;"` ;;
|
||||
--datadir=*) DATADIR=`echo "$arg" | sed -e "s;--datadir=;;"` ;;
|
||||
--pid-file=*) pid_file=`echo "$arg" | sed -e "s;--pid-file=;;"` ;;
|
||||
--user=*) user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 ;;
|
||||
--basedir=*) MY_BASEDIR_VERSION="$val" ;;
|
||||
--datadir=*) DATADIR="$val" ;;
|
||||
--pid-file=*) pid_file="$val" ;;
|
||||
--user=*) user="$val"; SET_USER=1 ;;
|
||||
|
||||
# these might have been set in a [mysqld_safe] section of my.cnf
|
||||
# they are added to mysqld command line to override settings from my.cnf
|
||||
--log-error=*) err_log=`echo "$arg" | sed -e "s;--log-error=;;"` ;;
|
||||
--socket=*) mysql_unix_port=`echo "$arg" | sed -e "s;--socket=;;"` ;;
|
||||
--port=*) mysql_tcp_port=`echo "$arg" | sed -e "s;--port=;;"` ;;
|
||||
--log-error=*) err_log="$val" ;;
|
||||
--port=*) mysql_tcp_port="$val" ;;
|
||||
--socket=*) mysql_unix_port="$val" ;;
|
||||
|
||||
# mysqld_safe-specific options - must be set in my.cnf ([mysqld_safe])!
|
||||
--ledir=*) ledir=`echo "$arg" | sed -e "s;--ledir=;;"` ;;
|
||||
--open-files-limit=*) open_files=`echo "$arg" | sed -e "s;--open-files-limit=;;"` ;;
|
||||
--core-file-size=*) core_file_size=`echo "$arg" | sed -e "s;--core-file-size=;;"` ;;
|
||||
--timezone=*) TZ=`echo "$arg" | sed -e "s;--timezone=;;"` ; export TZ; ;;
|
||||
--mysqld=*) MYSQLD=`echo "$arg" | sed -e "s;--mysqld=;;"` ;;
|
||||
--core-file-size=*) core_file_size="$val" ;;
|
||||
--ledir=*) ledir="$val" ;;
|
||||
--mysqld=*) MYSQLD="$val" ;;
|
||||
--mysqld-version=*)
|
||||
tmp=`echo "$arg" | sed -e "s;--mysqld-version=;;"`
|
||||
if test -n "$tmp"
|
||||
then
|
||||
MYSQLD="mysqld-$tmp"
|
||||
else
|
||||
MYSQLD="mysqld"
|
||||
fi
|
||||
;;
|
||||
--nice=*) niceness=`echo "$arg" | sed -e "s;--nice=;;"` ;;
|
||||
--help)
|
||||
usage
|
||||
if test -n "$val"
|
||||
then
|
||||
MYSQLD="mysqld-$val"
|
||||
else
|
||||
MYSQLD="mysqld"
|
||||
fi
|
||||
;;
|
||||
--nice=*) niceness="$val" ;;
|
||||
--open-files-limit=*) open_files="$val" ;;
|
||||
--skip-kill-mysqld*) KILL_MYSQLD=0 ;;
|
||||
--syslog) syslog=1 ;;
|
||||
--skip-syslog) syslog=0 ;;
|
||||
--timezone=*) TZ="$val"; export TZ; ;;
|
||||
|
||||
--help) usage ;;
|
||||
|
||||
*)
|
||||
if test -n "$pick_args"
|
||||
then
|
||||
|
@ -120,8 +166,7 @@ then
|
|||
MY_BASEDIR_VERSION=$MY_PWD # Where bin, share and data are
|
||||
ledir=$MY_BASEDIR_VERSION/bin # Where mysqld is
|
||||
# Check for the directories we would expect from a source install
|
||||
elif test -f ./share/mysql/english/errmsg.sys -a \
|
||||
-x ./libexec/mysqld
|
||||
elif test -f ./share/mysql/english/errmsg.sys -a -x ./libexec/mysqld
|
||||
then
|
||||
MY_BASEDIR_VERSION=$MY_PWD # Where libexec, share and var are
|
||||
ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld is
|
||||
|
@ -156,17 +201,17 @@ if test -z "$MYSQL_HOME"
|
|||
then
|
||||
if test -r "$MY_BASEDIR_VERSION/my.cnf" && test -r "$DATADIR/my.cnf"
|
||||
then
|
||||
echo "WARNING: Found two instances of my.cnf -"
|
||||
echo "$MY_BASEDIR_VERSION/my.cnf and"
|
||||
echo "$DATADIR/my.cnf"
|
||||
echo "IGNORING $DATADIR/my.cnf"
|
||||
echo
|
||||
log_error "WARNING: Found two instances of my.cnf -
|
||||
$MY_BASEDIR_VERSION/my.cnf and
|
||||
$DATADIR/my.cnf
|
||||
IGNORING $DATADIR/my.cnf"
|
||||
|
||||
MYSQL_HOME=$MY_BASEDIR_VERSION
|
||||
elif test -r "$DATADIR/my.cnf"
|
||||
then
|
||||
echo "WARNING: Found $DATADIR/my.cnf"
|
||||
echo "Datadir is deprecated place for my.cnf, please move it to $MY_BASEDIR_VERSION"
|
||||
echo
|
||||
log_error "WARNING: Found $DATADIR/my.cnf
|
||||
The data directory is a deprecated location for my.cnf, please move it to
|
||||
$MY_BASEDIR_VERSION/my.cnf"
|
||||
MYSQL_HOME=$DATADIR
|
||||
else
|
||||
MYSQL_HOME=$MY_BASEDIR_VERSION
|
||||
|
@ -174,12 +219,6 @@ then
|
|||
fi
|
||||
export MYSQL_HOME
|
||||
|
||||
user=@MYSQLD_USER@
|
||||
niceness=0
|
||||
|
||||
# these rely on $DATADIR by default, so we'll set them later on
|
||||
pid_file=
|
||||
err_log=
|
||||
|
||||
# Get first arguments from the my.cnf file, groups [mysqld] and [mysqld_safe]
|
||||
# and then merge with the command line arguments
|
||||
|
@ -201,16 +240,56 @@ append_arg_to_args () {
|
|||
}
|
||||
|
||||
args=
|
||||
|
||||
SET_USER=2
|
||||
parse_arguments `$print_defaults $defaults --loose-verbose mysqld server`
|
||||
if test $SET_USER -eq 2
|
||||
then
|
||||
SET_USER=0
|
||||
fi
|
||||
|
||||
parse_arguments `$print_defaults $defaults --loose-verbose mysqld_safe safe_mysqld`
|
||||
parse_arguments PICK-ARGS-FROM-ARGV "$@"
|
||||
safe_mysql_unix_port=${mysql_unix_port:-${MYSQL_UNIX_PORT:-@MYSQL_UNIX_ADDR@}}
|
||||
|
||||
# Determine what logging facility to use
|
||||
if [ -n "$err_log" -o $syslog -eq 0 ]
|
||||
then
|
||||
if [ -n "$err_log" ]
|
||||
then
|
||||
# mysqld adds ".err" if there is no extension on the --log-err
|
||||
# argument; must match that here, or mysqld_safe will write to a
|
||||
# different log file than mysqld
|
||||
|
||||
# mysqld does not add ".err" to "--log-error=foo."; it considers a
|
||||
# trailing "." as an extension
|
||||
if expr "$err_log" : '.*\.[^/]*$' > /dev/null
|
||||
then
|
||||
:
|
||||
else
|
||||
err_log="$err_log".err
|
||||
fi
|
||||
|
||||
case "$err_log" in
|
||||
/* ) ;;
|
||||
* ) err_log="$DATADIR/$err_log" ;;
|
||||
esac
|
||||
else
|
||||
err_log=$DATADIR/`@HOSTNAME@`.err
|
||||
fi
|
||||
|
||||
append_arg_to_args "--log-error=$err_log"
|
||||
|
||||
if [ $syslog -eq 1 ]
|
||||
then
|
||||
# User explicitly asked for syslog, so warn that it isn't used
|
||||
log_error "Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect. Logging to '$err_log'."
|
||||
fi
|
||||
|
||||
# Don't use syslog since syslog and error log don't mix well
|
||||
syslog=0
|
||||
fi
|
||||
|
||||
safe_mysql_unix_port=${mysql_unix_port:-${MYSQL_UNIX_PORT:-@MYSQL_UNIX_ADDR@}}
|
||||
# Make sure that directory for $safe_mysql_unix_port exists
|
||||
mysql_unix_port_dir=`dirname $safe_mysql_unix_port`
|
||||
if [ ! -d $mysql_unix_port_dir ]
|
||||
|
@ -228,12 +307,11 @@ fi
|
|||
|
||||
if test ! -x $ledir/$MYSQLD
|
||||
then
|
||||
echo "The file $ledir/$MYSQLD doesn't exist or is not executable"
|
||||
echo "Please do a cd to the mysql installation directory and restart"
|
||||
echo "this script from there as follows:"
|
||||
echo "./bin/mysqld_safe".
|
||||
echo "See http://dev.mysql.com/doc/mysql/en/mysqld_safe.html for more"
|
||||
echo "information"
|
||||
log_error "The file $ledir/$MYSQLD
|
||||
does not exist or is not executable. Please cd to the mysql installation
|
||||
directory and restart this script from there as follows:
|
||||
./bin/mysqld_safe&
|
||||
See http://dev.mysql.com/doc/mysql/en/mysqld_safe.html for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -248,30 +326,6 @@ else
|
|||
fi
|
||||
append_arg_to_args "--pid-file=$pid_file"
|
||||
|
||||
if [ -n "$err_log" ]
|
||||
then
|
||||
# mysqld adds ".err" if there is no extension on the --log-err
|
||||
# argument; must match that here, or mysqld_safe will write to a
|
||||
# different log file than mysqld
|
||||
|
||||
# mysqld does not add ".err" to "--log-error=foo."; it considers a
|
||||
# trailing "." as an extension
|
||||
if expr "$err_log" : '.*\.[^/]*$' > /dev/null
|
||||
then
|
||||
:
|
||||
else
|
||||
err_log="$err_log".err
|
||||
fi
|
||||
|
||||
case "$err_log" in
|
||||
/* ) ;;
|
||||
* ) err_log="$DATADIR/$err_log" ;;
|
||||
esac
|
||||
else
|
||||
err_log=$DATADIR/`@HOSTNAME@`.err
|
||||
fi
|
||||
append_arg_to_args "--log-error=$err_log"
|
||||
|
||||
if test -n "$mysql_unix_port"
|
||||
then
|
||||
append_arg_to_args "--socket=$mysql_unix_port"
|
||||
|
@ -296,7 +350,7 @@ fi
|
|||
if nohup nice > /dev/null 2>&1
|
||||
then
|
||||
normal_niceness=`nice`
|
||||
nohup_niceness=`nohup nice`
|
||||
nohup_niceness=`nohup nice 2>/dev/null`
|
||||
|
||||
numeric_nice_values=1
|
||||
for val in $normal_niceness $nohup_niceness
|
||||
|
@ -366,18 +420,17 @@ then
|
|||
then
|
||||
if @FIND_PROC@
|
||||
then # The pid contains a mysqld process
|
||||
echo "A mysqld process already exists"
|
||||
echo "A mysqld process already exists at " `date` >> $err_log
|
||||
log_error "A mysqld process already exists"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
rm -f $pid_file
|
||||
if test -f $pid_file
|
||||
then
|
||||
echo "Fatal error: Can't remove the pid file: $pid_file"
|
||||
echo "Fatal error: Can't remove the pid file: $pid_file at " `date` >> $err_log
|
||||
echo "Please remove it manually and start $0 again"
|
||||
echo "mysqld daemon not started"
|
||||
log_error "Fatal error: Can't remove the pid file:
|
||||
$pid_file
|
||||
Please remove it manually and start $0 again;
|
||||
mysqld daemon not started"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
@ -394,33 +447,32 @@ fi
|
|||
# $MY_BASEDIR_VERSION/bin/myisamchk --silent --force --fast --medium-check $DATADIR/*/*.MYI
|
||||
# $MY_BASEDIR_VERSION/bin/isamchk --silent --force $DATADIR/*/*.ISM
|
||||
|
||||
echo "Starting $MYSQLD daemon with databases from $DATADIR"
|
||||
|
||||
# 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 "`date +'%y%m%d %H:%M:%S mysqld started'`" >> $err_log
|
||||
cmd="$NOHUP_NICENESS"
|
||||
|
||||
for i in "$ledir/$MYSQLD" "$defaults" "--basedir=$MY_BASEDIR_VERSION" \
|
||||
"--datadir=$DATADIR" "$USER_OPTION"
|
||||
do
|
||||
cmd="$cmd "`shell_quote_string "$i"`
|
||||
done
|
||||
cmd="$cmd $args"
|
||||
# Avoid 'nohup: ignoring input' warning
|
||||
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"
|
||||
|
||||
log_notice "Starting $MYSQLD daemon with databases from $DATADIR"
|
||||
while true
|
||||
do
|
||||
rm -f $safe_mysql_unix_port $pid_file # Some extra safety
|
||||
|
||||
cmd="$NOHUP_NICENESS"
|
||||
|
||||
for i in "$ledir/$MYSQLD" "$defaults" "--basedir=$MY_BASEDIR_VERSION" \
|
||||
"--datadir=$DATADIR" "$USER_OPTION"
|
||||
do
|
||||
cmd="$cmd "`shell_quote_string "$i"`
|
||||
done
|
||||
cmd="$cmd $args >> "`shell_quote_string "$err_log"`" 2>&1"
|
||||
#echo "Running mysqld: [$cmd]"
|
||||
eval "$cmd"
|
||||
eval_log_error "$cmd"
|
||||
|
||||
if test ! -f $pid_file # This is removed if normal shutdown
|
||||
then
|
||||
echo "STOPPING server from pid file $pid_file"
|
||||
break
|
||||
fi
|
||||
|
||||
|
@ -433,7 +485,7 @@ do
|
|||
# kill -9 is used or the process won't react on the kill.
|
||||
numofproces=`ps xaww | grep -v "grep" | grep "$ledir/$MYSQLD\>" | grep -c "pid-file=$pid_file"`
|
||||
|
||||
echo -e "\nNumber of processes running now: $numofproces" | tee -a $err_log
|
||||
log_notice "Number of processes running now: $numofproces"
|
||||
I=1
|
||||
while test "$I" -le "$numofproces"
|
||||
do
|
||||
|
@ -446,16 +498,15 @@ do
|
|||
# echo "TEST $I - $T **"
|
||||
if kill -9 $T
|
||||
then
|
||||
echo "$MYSQLD process hanging, pid $T - killed" | tee -a $err_log
|
||||
else
|
||||
log_error "$MYSQLD process hanging, pid $T - killed"
|
||||
else
|
||||
break
|
||||
fi
|
||||
I=`expr $I + 1`
|
||||
done
|
||||
fi
|
||||
echo "`date +'%y%m%d %H:%M:%S'` mysqld restarted" | tee -a $err_log
|
||||
log_notice "mysqld restarted"
|
||||
done
|
||||
|
||||
echo "`date +'%y%m%d %H:%M:%S'` mysqld ended" | tee -a $err_log
|
||||
echo "" | tee -a $err_log
|
||||
log_notice "mysqld from pid file $pid_file ended"
|
||||
|
||||
|
|
Loading…
Reference in a new issue