diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 48c98f2fde3..f3759cbbf6b 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -343,6 +343,32 @@ fi parse_arguments `$print_defaults $defaults --loose-verbose mysqld_safe safe_mysqld` parse_arguments PICK-ARGS-FROM-ARGV "$@" +# A pid file is created for the mysqld_safe process. This file protects the +# server instance resources during race conditions. +safe_pid="$DATADIR/mysqld_safe.pid" +if test -f $safe_pid +then + PID=`cat "$safe_pid"` + if @CHECK_PID@ + then + if @FIND_PROC@ + then + log_error "A mysqld_safe process already exists" + exit 1 + fi + fi + rm -f "$safe_pid" + if test -f "$safe_pid" + then + log_error "Fatal error: Can't remove the mysqld_safe pid file" + exit 1 + fi +fi + +# Insert pid proerply into the pid file. +ps -e | grep [m]ysqld_safe | awk '{print $1}' | sed -n 1p > $safe_pid +# End of mysqld_safe pid(safe_pid) check. + # Determine what logging facility to use # Ensure that 'logger' exists, if it's requested @@ -352,6 +378,7 @@ then if [ $? -ne 0 ] then log_error "--syslog requested, but no 'logger' program found. Please ensure that 'logger' is in your PATH, or do not specify the --syslog option to mysqld_safe." + rm -f "$safe_pid" # Clean Up of mysqld_safe.pid file. exit 1 fi fi @@ -456,6 +483,7 @@ 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" + rm -f "$safe_pid" # Clean Up of mysqld_safe.pid file. exit 1 fi @@ -549,6 +577,7 @@ then if @FIND_PROC@ then # The pid contains a mysqld process log_error "A mysqld process already exists" + rm -f "$safe_pid" # Clean Up of mysqld_safe.pid file. exit 1 fi fi @@ -559,6 +588,7 @@ then $pid_file Please remove it manually and start $0 again; mysqld daemon not started" + rm -f "$safe_pid" # Clean Up of mysqld_safe.pid file. exit 1 fi fi @@ -644,3 +674,5 @@ done log_notice "mysqld from pid file $pid_file ended" +rm -f "$safe_pid" # Some Extra Safety. File is deleted + # once the mysqld process ends.