diff options
Diffstat (limited to 'support-files/mysql.server.sh')
-rw-r--r-- | support-files/mysql.server.sh | 131 |
1 files changed, 105 insertions, 26 deletions
diff --git a/support-files/mysql.server.sh b/support-files/mysql.server.sh index 150a8a151ba..6dbffdc9778 100644 --- a/support-files/mysql.server.sh +++ b/support-files/mysql.server.sh @@ -39,19 +39,31 @@ # If you want to affect other MySQL variables, you should make your changes # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files. +# If you change base dir, you must also change datadir. These may get +# overwritten by settings in the MySQL configuration files. + basedir= +datadir= # The following variables are only set for letting mysql.server find things. # Set some defaults -datadir=@localstatedir@ pid_file= +server_pid_file= +use_mysqld_safe=1 +user=@MYSQLD_USER@ if test -z "$basedir" then basedir=@prefix@ bindir=@bindir@ + datadir=@localstatedir@ + sbindir=@sbindir@ + libexecdir=@libexecdir@ else bindir="$basedir/bin" + datadir="$basedir/data" + sbindir="$basedir/sbin" + libexecdir="$basedir/libexec" fi # @@ -82,12 +94,29 @@ case `echo "testing\c"`,`echo -n testing` in *) echo_n= echo_c='\c' ;; esac -parse_arguments() { +parse_server_arguments() { for arg do case "$arg" in - --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` + bindir="$basedir/bin" + datadir="$basedir/data" + sbindir="$basedir/sbin" + libexecdir="$basedir/libexec" + ;; --datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --pid-file=*) server_pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --use-mysqld_safe) use_mysqld_safe=1;; + --use-manager) use_mysqld_safe=0;; + esac + done +} + +parse_manager_arguments() { + for arg do + case "$arg" in --pid-file=*) pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; esac done } @@ -120,7 +149,7 @@ wait_for_pid () { } # Get arguments from the my.cnf file, -# groups [mysqld] [mysql_server] and [mysql.server] +# the only group, which is read from now on is [mysqld] if test -x ./bin/my_print_defaults then print_defaults="./bin/my_print_defaults" @@ -159,30 +188,47 @@ else fi # -# Test if someone changed datadir; In this case we should also read the -# default arguments from this directory +# 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 "$datadir" != "@localstatedir@" +if test -r "$basedir/my.cnf" then - extra_args="-e $datadir/my.cnf" + extra_args="-e $basedir/my.cnf" +else + if test -r "$datadir/my.cnf" + then + extra_args="-e $datadir/my.cnf" + fi fi -parse_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server` +parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server` + +# Look for the pidfile +parse_manager_arguments `$print_defaults $extra_args manager` # # Set pid file if not given # if test -z "$pid_file" then - pid_file=$datadir/`@HOSTNAME@`.pid + pid_file=$datadir/mysqlmanager-`@HOSTNAME@`.pid else case "$pid_file" in /* ) ;; * ) pid_file="$datadir/$pid_file" ;; esac fi +if test -z "$server_pid_file" +then + server_pid_file=$datadir/`@HOSTNAME@`.pid +else + case "$server_pid_file" in + /* ) ;; + * ) server_pid_file="$datadir/$server_pid_file" ;; + esac +fi # Safeguard (relative paths, core dumps..) cd $basedir @@ -191,42 +237,75 @@ case "$mode" in 'start') # Start daemon - if test -x $bindir/mysqld_safe + manager=$bindir/mysqlmanager + if test -x $libexecdir/mysqlmanager + then + manager=$libexecdir/mysqlmanager + elif test -x $sbindir/mysqlmanager + then + manager=$sbindir/mysqlmanager + fi + + echo $echo_n "Starting MySQL" + if test -x $manager -a "$use_mysqld_safe" = "0" then # Give extra arguments to mysqld with the my.cnf file. This script may # be overwritten at next upgrade. - echo $echo_n "Starting MySQL" - $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 & + $manager --user=$user --pid-file=$pid_file >/dev/null 2>&1 & + wait_for_pid created + + # Make lock for RedHat / SuSE + if test -w /var/lock/subsys + then + touch /var/lock/subsys/mysqlmanager + fi + elif test -x $bindir/mysqld_safe + then + # Give extra arguments to mysqld with the my.cnf file. This script + # may be overwritten at next upgrade. + pid_file=$server_pid_file + $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file >/dev/null 2>&1 & wait_for_pid created - + # Make lock for RedHat / SuSE if test -w /var/lock/subsys then touch /var/lock/subsys/mysql fi else - log_failure_msg "Can't execute $bindir/mysqld_safe" + log_failure_msg "Couldn't find MySQL manager or server" fi ;; 'stop') # Stop daemon. We use a signal here to avoid having to know the # root password. + + # The RedHat / SuSE lock directory to remove + lock_dir=/var/lock/subsys/mysqlmanager + + # If the manager pid_file doesn't exist, try the server's + if test ! -s "$pid_file" + then + pid_file=$server_pid_file + lock_dir=/var/lock/subsys/mysql + fi + if test -s "$pid_file" then - mysqld_pid=`cat $pid_file` + mysqlmanager_pid=`cat $pid_file` echo $echo_n "Shutting down MySQL" - kill $mysqld_pid - # mysqld should remove the pid_file when it exits, so wait for it. + kill $mysqlmanager_pid + # mysqlmanager should remove the pid_file when it exits, so wait for it. wait_for_pid removed # delete lock for RedHat / SuSE - if test -f /var/lock/subsys/mysql + if test -f $lock_dir then - rm -f /var/lock/subsys/mysql + rm -f $lock_dir fi else - log_failure_msg "MySQL PID file could not be found!" + log_failure_msg "MySQL manager or server PID file could not be found!" fi ;; @@ -235,17 +314,17 @@ case "$mode" in # running or not, start it again. $0 stop $0 start - ;; + ;; 'reload') - if test -s "$pid_file" ; then - mysqld_pid=`cat $pid_file` + if test -s "$server_pid_file" ; then + mysqld_pid=`cat $server_pid_file` kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL" - touch $pid_file + touch $server_pid_file else log_failure_msg "MySQL PID file could not be found!" fi - ;; + ;; *) # usage |