blob: c837ba9a11837920e3b511f1dd3c3070916167d6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
#!/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 demon 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 mysqld_safe
# Check if we are starting this relative (for the binary release)
if test -f ./data/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \
-x ./bin/mysqld
then
MY_BASEDIR_VERSION=`pwd` # Where bin, share and data is
DATADIR=$MY_BASEDIR_VERSION/data # Where the databases are
ledir=$MY_BASEDIR_VERSION/bin # Where mysqld are
# 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 is
DATADIR=$MY_BASEDIR_VERSION/var # Where the databases are
ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld are
else
MY_BASEDIR_VERSION=/usr/local/mysql
DATADIR=/usr/local/mysql/var
ledir=/usr/local/mysql/libexec
fi
hostname=`@HOSTNAME@`
pidfile=$DATADIR/$hostname.pid
log=$DATADIR/$hostname.log
err=$DATADIR/$hostname.err
lockfile=$DATADIR/$hostname.lock
#
# If there exists an old pid file, check if the demon is already running
# Note: The switches to 'ps' may depend on your operating system
if test -f $pidfile
then
PID=`cat $pidfile`
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` >> $log
exit 1;
fi
fi
rm -f $pidfile
if test -f $pidfile
then
echo "Fatal error: Can't remove the pid file: $pidfile"
echo "Fatal error: Can't remove the pid file: $pidfile at " `date` >> $log
echo "Please remove it manually and start $0 again"
echo "mysqld demon not started"
exit 1;
fi
fi
echo "Starting mysqld demon 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` >> $log
bin/zap -f $lockfile < /dev/null > /dev/null 2>&1
rm -f $lockfile
$MY_BASEDIR_VERSION/bin/watchdog_mysqld $lockfile $pidfile $MY_BASEDIR_VERSION/bin $DATADIR 3 10 >> $err 2>&1 &
restart_pid=$!
while true
do
rm -f $MYSQL_UNIX_PORT $pidfile # Some extra safety
lockfile -1 -r10 $lockfile >/dev/null 2>&1
if test "$#" -eq 0
then
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
--skip-external-locking >> $err 2>&1 &
else
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
--skip-external-locking "$@" >> $err 2>&1 &
fi
pid=$!
rm -f $lockfile
wait $pid;
lockfile -1 -r10 $lockfile >/dev/null 2>&1
rm -f $lockfile
if test ! -f $pidfile # This is removed if normal shutdown
then
break;
fi
if true
then
# Test if one proces 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 proces 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 $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 proces hanging, pid $T - killed" | tee -a $log
else
break
fi
I=`expr $I + 1`
done
fi
echo "mysqld restarted" | tee -a $log
# Check all tables and repair any wrong tables.
$MY_BASEDIR_VERSION/bin/isamchk -sf $DATADIR/*/*.ISM >> $err 2>&1
done
if test $restart_pid -gt 0
then
kill $restart_pid > /dev/null 2>&1
sleep 1;
kill -9 $restart_pid > /dev/null 2>&1
fi
echo -n "mysqld ended on " `date` >> $log
echo "mysqld demon ended"
|