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
|
#!/bin/sh
start_ts=$(date +%s)
PIDFILE="TMP_DIR/PORT/data/mysql_sandboxPORT.pid"
SOCKETFILE="TMP_DIR/PORT/mysql_sandboxPORT.sock"
BASEDIR="PERCONA_TOOLKIT_SANDBOX"
sandbox_is_alive() {
# First, all these files must exist.
[ -f $PIDFILE -a -S $SOCKETFILE ] || return 1
# And that PID file must have a PID.
local pid=$(cat TMP_DIR/PORT/data/mysql_sandboxPORT.pid 2>/dev/null)
[ "$pid" ] || return 1
# Second, MySQL is truly alive when it respond to a ping.
# It's not enough that the mysqld process is running because
# InnoDB can take time to create ibdata1, etc. So MySQL is
# only alive when it responds to queries.
$BASEDIR/bin/mysqladmin --defaults-file="TMP_DIR/PORT/my.sandbox.cnf" ping >/dev/null 2>&1
[ $? -eq 0 ] || return 1
return 0
}
_seq() {
local i="$1"
awk "BEGIN { for(i=1; i<=$i; i++) print i; }"
}
# #############################################################################
# Script starts here
# #############################################################################
echo -n "Stopping MySQL test server on port PORT... "
if sandbox_is_alive; then
$BASEDIR/bin/mysqladmin --defaults-file=TMP_DIR/PORT/my.sandbox.cnf shutdown
fi
for i in $(_seq 60); do
if sandbox_is_alive; then
sleep 1
continue
fi
rm -rf $PIDFILE 2>/dev/null
rm -rf $SOCKETFILE 2>/dev/null
end_ts=$(date +%s)
t=$((end_ts - start_ts))
echo "OK (${t}s)"
exit 0
done
end_ts=$(date +%s)
t=$((end_ts - start_ts))
echo "FAILED (${t}s)"
exit 1
|