Files
percona-toolkit/sandbox/servers/start
Carlos Salguero 5d74b0e765 PT-1530 WIP Added encryption plugins to sandbox start
In order to be able to test encryption support in Percona Server and
MySQL, we need to enable encription plugins in the sandbox.
This commit adds detection of plugin libraries in the MySQL binaries
directory and enables it automatically.
2018-04-12 10:21:25 -03:00

93 lines
2.6 KiB
Bash
Executable File

#!/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
echo "return 0"
return 0
}
_seq() {
local i="$1"
awk "BEGIN { for(i=1; i<=$i; i++) print i; }"
}
# #############################################################################
# Script starts here
# #############################################################################
# If there's a PID or socket file, MySQL may already be alive.
if [ -f "$PIDFILE" -o -S "$SOCKETFILE" ]; then
if sandbox_is_alive; then
echo "MySQL test server on port PORT is running."
exit 0
fi
# Sandbox exists but is not running. Clear it and then start it.
TMP_DIR/PORT/stop >/dev/null 2>&1
fi
echo -n "Starting MySQL test server on port PORT... "
# Start MySQL.
cwd=$PWD
cd $BASEDIR
encryption_plugins=""
plugins_dir_cmd=""
plugins_cmd=""
keyring_cmd=""
if [ -e "${BASEDIR}/lib/mysql/plugin/keyring_file.so" ]; then
encryption_plugins="${BASEDIR}/lib/mysql/plugin/keyring_file.so"
fi
if [ ! -z "$encryption_plugins" ]; then
plugins_cmd="--early-plugin-load=${encryption_plugins}"
keyring_cmd="--keyring_file_data=/tmp/PORT/data/keyring"
plugins_dir_cmd="--plugin-dir=${BASEDIR}/lib/mysql/plugin/"
fi
init_file="/tmp/12345/mysql-init"
if [ -e $init_file ]; then
$BASEDIR/bin/mysqld --defaults-file=/tmp/12345/my.sandbox.cnf -u root --init-file $init_file $plugins_cmd $plugins_dir_cmd $keyring_cmd &
else
$BASEDIR/bin/mysqld --defaults-file=/tmp/12345/my.sandbox.cnf --keyring_file_data=/tmp/12345/data/keyring $plugins_cmd $plugins_dir_cmd $keyring_cmd > /dev/null 2>&1 &
fi
cd $PWD
# Wait for MySQL to actually be up, i.e. to respond to queries.
for i in $(_seq 60); do
if sandbox_is_alive; then
end_ts=$(date +%s)
t=$((end_ts - start_ts))
echo "OK (${t}s)"
exit 0
fi
sleep 1
done
end_ts=$(date +%s)
t=$((end_ts - start_ts))
echo "FAILED (${t}s)"
exit 1