components/mysql-5-6/Solaris/mysql_56
author Gipson Pulla <gipson.pulla@oracle.com>
Wed, 15 Mar 2017 23:29:04 -0700
branchs11u3-sru
changeset 7765 3495fc32877e
parent 6570 255c6d88d419
permissions -rw-r--r--
25372130 Upgrade the version of MySQL 5.5 to 5.5.54 on Solaris 25364635 Upgrade the version of MySQL 5.6 to 5.6.35 on Solaris 25372106 Upgrade the version of MySQL 5.7 to 5.7.17 on Solaris 24835634 Upgrade MySQL server 5.7 to 5.7.15 on Solaris 24688109 Upgrade MySQL 5.5 to 5.5.52 on Solaris 23227671 Upgrade MySQL 5.5 to 5.5.49 on Solaris 15818149 mysql stop method unsafe 18605985 Need to resolve dependencies between MySQL 5.5 database and client pkgs 23227615 Port fix for Bug 23022999 from MySQL 5.6 to 5.5 23227642 Port fix for Bug 23053990 from MySQL 5.6 to 5.5 21150630 mysql SMF instances should check to see if it's really online before returning 22959660 mysql SMF service must not hardcode pid-file, socket and log-error 24708946 Upgrade the version of MySQL 5.6 to 5.6.33 on Solaris 25236651 COMPONENT_ARCHIVE_URL for MySQL-5.6 Makefile is not working 24924801 problem in DATABASE/MYSQL 25427164 problem in DATABASE/MYSQL 25215584 problem in DATABASE/MYSQL 25427149 problem in DATABASE/MYSQL 24923761 problem in DATABASE/MYSQL 25427194 problem in DATABASE/MYSQL

#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
#

. /lib/svc/share/smf_include.sh

# SMF_FMRI is the name of the target service. This allows multiple instances 
# to use the same script.

if [ -z $SMF_FMRI ]; then
        echo "SMF framework variables are not initialized."
        exit $SMF_EXIT_ERR
fi

getproparg() {
	val=`svcprop -p $1 $SMF_FMRI`
	[ -n "$val" ] && echo $val
}

MYSQLCNF=`getproparg mysql/cnf`
MYSQLBIN=`getproparg mysql/bin`
MYSQLDATA=`getproparg mysql/data`
STARTTIMEOUT=180

if [ -z ${MYSQLCNF} ]; then
        echo "mysql/cnf property not set"
        exit $SMF_EXIT_ERR_CONFIG
fi

if [ -z ${MYSQLBIN} ]; then
        echo "mysql/bin property not set"
        exit $SMF_EXIT_ERR_CONFIG
fi

if [ -z ${MYSQLDATA} ]; then
	echo "mysql/data property not set"
	exit $SMF_EXIT_ERR_CONFIG
fi

if [ ! -d ${MYSQLDATA} ]; then
	echo "mysql/data directory ${MYSQLDATA} is not a valid MySQL data directory"
	exit $SMF_EXIT_ERR_CONFIG
fi

if [ ! -d ${MYSQLDATA}/mysql ]; then
	echo ${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} --defaults-file=${MYSQLCNF} 
	${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} --defaults-file=${MYSQLCNF} 
fi

getpidfile() {
 ret=$(${MYSQLBIN}/my_print_defaults --defaults-file=${MYSQLCNF} \
 mysqld | grep '^--pid-file=' | cut -d= -f2- | tail -1)
 [ -z "$ret" ] && ret="${MYSQLDATA}/$(/usr/bin/uname -n).pid"
 echo $ret
}

getsockfile() {
 ret=$(${MYSQLBIN}/my_print_defaults --defaults-file=${MYSQLCNF} \
 mysqld | grep '^--socket=' | cut -d= -f2- | tail -1)
 [ -z "$ret" ] && ret="/tmp/mysql.sock"
 echo $ret
}

PIDFILE=$(getpidfile)
SOCKFILE=$(getsockfile)

# ping function which return success when mysqld starts accepting connections
# or return failure in case of timeout after $STARTTIMEOUT seconds.
# using this function in mysql_start(), method waits/blocks to mysqld is really ready,
# which might take some time in case of recovery.

mysql_pinger() {    
    mysqld_safe_pid=$1
    timer=$STARTTIMEOUT
    ret=0
    while [ $timer -gt 0 ]; do
        sleep 1
        ${MYSQLBIN}/mysqladmin --no-defaults --socket=${SOCKFILE} --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break
	timer=$(expr $timer - 1)

	# Check if mysqld_safe is still alive, if not there is no hope
	if ! kill -0 $mysqld_safe_pid >/dev/null 2>&1 ; then
	    ret=1
	    break
	fi
    done
    
    # Did we timeout?
    if [ $timer = 0 ]; then
	echo "MySQL Database start up timeout after ${STARTTIMEOUT}s"
	ret=1
    fi
    return $ret
}


# refresh method for this service is not defined because mysqld by itself
# cannot accept a HUP signal to reload the configuration file my.cnf

mysql_start() 	{
	echo ${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE}
	${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE} > /dev/null &
	
	if mysql_pinger $! ; then
            echo "Starting service MySQL"
        else
            echo "Failed to start service MySQL"
            exit $SMF_EXIT_ERR
        fi
}
	
case "$1" in
'start')
	mysql_start 
	;;

*)
	echo "Usage: $0 start"
	exit 1
	;;

esac
exit $SMF_EXIT_OK