File: //etc/rc4.d/S01mysql
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network $time
# Should-Stop: $network $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/ Stop MySQL Community Server daemon
# Description: This service script facilitates startup and shutdown of
# mysqld daemon throught its wrapper script mysqld_safe
### END INIT INFO
#
# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
. /lib/lsb/init-functions
. /usr/share/mysql/mysql-helpers
cd /
umask 077
# In case server is taking more to start or stop increase the timeout in defaults file
STARTTIMEOUT=120
STOPTIMEOUT=600
[ -e /etc/default/mysql ] && . /etc/default/mysql || true
VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4)
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
}
fix_thp_setting() {
THP_SETTING=$(get_mysql_option mysqld_safe thp-setting "")
if [ ! -z "${THP_SETTING}" ]; then
# Set whatever option is specified in config file
echo "${THP_SETTING}" > /sys/kernel/mm/transparent_hugepage/defrag
echo "${THP_SETTING}" > /sys/kernel/mm/transparent_hugepage/enabled
fi
}
check_exit_status() {
errcode=$1
if [ $errcode -gt 0 ];
then
exit $errcode
fi
}
get_running () {
PIDFILE=$(get_mysql_option mysqld_safe pid-file "")
MYSQLDATA=$(get_mysql_option mysqld datadir "/var/lib/mysql")
if [ -z "$PIDFILE" ];
then
PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid")
fi
case $PIDFILE in
/*) ;;
*) PIDFILE="$MYSQLDATA/$PIDFILE" ;;
esac
if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ];
then
echo 1
else
echo 0
fi
}
verify_server () {
TIMEOUT=0
if [ "${1}" = "start" ];
then
TIMEOUT=${STARTTIMEOUT}
elif [ "${1}" = "stop" ];
then
TIMEOUT=${STOPTIMEOUT}
fi
COUNT=0
while [ ${COUNT} -lt ${TIMEOUT} ];
do
COUNT=$(( COUNT+1 ))
echo -n .
if [ "${1}" = "start" ] && [ "$(get_running)" = 1 ];
then
if [ -z ${2} ];
then
echo
fi
return 0
fi
if [ "${1}" = "stop" ] && [ "$(get_running)" = 0 ];
then
if [ -z ${2} ];
then
echo
fi
return 0
fi
sleep 1
done
return 1
}
case "$1" in
'start')
if [ "$(get_running)" -eq 1 ];
then
log_action_msg "Percona Server is already started"
else
MYSQLRUN=/var/run/mysqld
MYSQLDATA=$(get_mysql_option mysqld datadir "/var/lib/mysql")
MYSQLFILES=/var/lib/mysql-files
MYSQLLOG=/var/log/mysql
MYSQLKEYRING=/var/lib/mysql-keyring
if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ];
then
install -d -m 0750 -omysql -gmysql ${MYSQLDATA}
check_exit_status $?
fi
if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ];
then
install -d -m 0770 -omysql -gmysql ${MYSQLFILES}
check_exit_status $?
fi
if [ ! -d ${MYSQLKEYRING} -a ! -L ${MYSQLKEYRING} ];
then
install -d -m 0750 -omysql -gmysql ${MYSQLKEYRING}
check_exit_status $?
fi
if [ ! "$(ls -A ${MYSQLDATA})" ] && [ -d ${MYSQLFILES} ] && [ -d ${MYSQLKEYRING} ];
then
su - mysql -s /bin/bash -c "/usr/sbin/mysqld --initialize-insecure=on 2>&1 > /dev/null"
check_exit_status $?
su - mysql -s /bin/bash -c "/usr/sbin/mysqld --log_error_verbosity=2 2>&1 > /dev/null &"
check_exit_status $?
verify_server start no-newline
mysql -e "INSTALL PLUGIN auth_socket SONAME 'auth_socket.so'"
mysql -e "USE mysql; UPDATE user SET plugin='auth_socket' WHERE user='root'"
mysqladmin shutdown
fi
if [ -x /usr/bin/mysql_ssl_rsa_setup -a ! -e "${MYSQLDATA}/server-key.pem" ];
then
/usr/bin/mysql_ssl_rsa_setup --datadir="${MYSQLDATA}" --uid=mysql >/dev/null 2>&1
fi
if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ];
then
install -d -m 0750 -omysql -gadm ${MYSQLLOG}
check_exit_status $?
install -m 0640 -omysql -gadm /dev/null ${MYSQLLOG}/error.log
check_exit_status $?
fi
if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ];
then
install -d -m 0755 -omysql -gmysql ${MYSQLRUN}
fi
# Needed because of TokuDB
fix_thp_setting
su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &"
check_exit_status $?
verify_server start
retval=$?
if [ "$retval" -eq 0 ];
then
log_action_msg "Percona Server ${VERSION} is started"
else
log_action_msg "Percona Server ${VERSION} did not start. Please check logs for more details."
exit $retval
fi
fi
;;
'stop')
if [ "$(get_running)" -eq 1 ];
then
killall -u mysql
verify_server stop
retval=$?
if [ "$retval" -eq 0 ];
then
log_action_msg "Percona Server ${VERSION} is stopped"
else
log_action_msg "Attempt to shutdown Percona Server ${VERSION} timed out"
exit $retval
fi
else
log_action_msg "Percona Server ${VERSION} is already stopped"
fi
;;
'restart'|'reload'|'force-reload')
log_action_msg "Stopping Percona Server ${VERSION}"
$0 stop
log_action_msg "Re-starting Percona Server ${VERSION}"
$0 start
;;
'status')
if [ "$(get_running)" -eq 1 ];
then
log_action_msg "Percona Server ${VERSION} is running"
else
log_action_msg "Percona Server ${VERSION} is not running"
exit 3
fi
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
exit 1
;;
esac
exit 0