Hello everyone! This is the first time I post here, so please bear with me.
It all started when I deleted a whole table by mistake. So I try to
recovered it by copying yesterday's backup. I had never done that before and
it all worked wrong. I found out MySQL server had to be restarted in order
to changes take effect.
I kill mysqld daemon with a 'kill PID', but I didn't know how to restart it
.I tried with a 'mysqld' but as soon as I close the Terminal Window, mysqld
died.
Then I tried with 'mysqld &' and it crashed after a while.
Finally I found this nice little script below, I executed it but due to my
ignorance I don't if what I did is right. Everything seems to be ok right
now but I'm not sure if it's gonna crash in a while.
Could you please take a look at it and tell me what you think.
Thanks in advance
Regards
MySQL version: 3.22.32
OS: FreeBSD 4.2
*************************** Beginning of safe_mysqld
********************************
#!/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 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.
#
# mysql.server works by first doing a cd to the base directory and from
there
# executing safe_mysqld
trap '' 1 2 3 15 # we shouldn't let anyone kill us
# Check if we are starting this relative (for the binary release)
if test -d ./data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
-x ./bin/mysqld
then
MY_BASEDIR_VERSION=`pwd` # Where bin, share and data are
DATADIR=$MY_BASEDIR_VERSION/data # Where the databases are
ledir=$MY_BASEDIR_VERSION/bin # Where mysqld is
# 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 are
DATADIR=$MY_BASEDIR_VERSION/var # Where the databases are
ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld is
else
MY_BASEDIR_VERSION=/usr/home/notodo/usr/local/mysql
DATADIR=/usr/home/notodo/usr/local/mysql/var
ledir=/usr/local/bin/
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/safe_mysqld".
exit 1;
fi
fi
pid_file=$DATADIR/`/bin/hostname`.pid
log=$DATADIR/`/bin/hostname`.log
err_log=$DATADIR/`/bin/hostname`.err
# Parse arguments to see if caller wants the pid_file somewhere else.
for arg
do
case $arg
in
--pid-file=*)
pid_file=`echo "$arg" | sed -e "s;--pid-file=;;"`
;;
--datadir=*)
DATADIR=`echo "$arg" | sed -e "s;--datadir=;;"`
;;
esac
done
#
# If there exists an old pid file, check if the daemon is already running
# Note: The switches to 'ps' may depend on your operating system
if test -f $pid_file
then
PID=`cat $pid_file`
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` >> $err_log
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"
exit 1;
fi
fi
#
# Uncomment the following lines if you want all tables to be automaticly
# checked and repaired at start
#
# echo "Checking tables in $DATADIR"
# isamchk --silent --force $DATADIR/*.ISM
echo "Starting mysqld daemon 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` >> $err_log
while true
do
rm -f $MYSQL_UNIX_PORT $pid_file # Some extra safety
if test "$#" -eq 0
then
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
>> $err_log 2>&1
else
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
"$@" >> $err_log 2>&1
fi
if test ! -f $pid_file # This is removed if normal shutdown
then
break;
fi
if false
then
# Test if one process 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 process 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
$err_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 process hanging, pid $T - killed" | tee -a $err_log
else
break
fi
I=`expr $I + 1`
done
fi
echo "mysqld restarted on " `date` | tee -a $err_log
done
echo "mysqld ended on " `date` >> $err_log
echo "mysqld daemon ended"
*************************** End of safe_mysqld
********************************
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php