File: //usr/share/mysql/mysql-systemd-start
#!/bin/bash
#
# Scripts to run by MySQL systemd service
#
# Needed argument: pre | post
#
# pre mode : try to perform sanity check for configuration, log, data
# post mode : ping server until answer is received
# Read a config option from mysql. Note that this will only work if a config
# file actually specifies the option, so it's important to specify a default
# $1 is application (e.g. mysqld for server)
# $2 is option
# $3 is default value used if no config value is found
get_mysql_option() {
result=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1)
if [ -z "$result" ];
then
result="$3"
fi
echo "$result"
}
sanity () {
if [ ! -r /etc/mysql/my.cnf ]; then
echo "MySQL configuration not found at /etc/mysql/my.cnf. Please create one."
exit 1
fi
datadir=$(get_mysql_option mysqld datadir "/var/lib/mysql")
if [ ! -d "${datadir}" ] && [ ! -L "${datadir}" ]; then
echo "MySQL data dir not found at ${datadir}. Please create one."
exit 1
fi
if [ ! -d "${datadir}/mysql" ] && [ ! -L "${datadir}/mysql" ]; then
echo "MySQL system database not found in ${datadir}. Please run mysqld --initialize."
exit 1
fi
}
pinger () {
server_up=false
for i in $(seq 1 30); do
sleep 1
if mysqladmin ping >/dev/null 2>&1; then
server_up=true
break
fi
done
if [ ! $server_up ]; then
echo "MySQL server not started"
exit 1
fi
}
case $1 in
"pre") sanity ;;
"post") pinger ;;
esac