17 # fields enclosed by brackets "[]" replaced with your own identifying |
17 # fields enclosed by brackets "[]" replaced with your own identifying |
18 # information: Portions Copyright [yyyy] [name of copyright owner] |
18 # information: Portions Copyright [yyyy] [name of copyright owner] |
19 # |
19 # |
20 # CDDL HEADER END |
20 # CDDL HEADER END |
21 # |
21 # |
22 # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
22 # Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. |
23 # |
23 # |
24 |
24 |
25 . /lib/svc/share/smf_include.sh |
25 . /lib/svc/share/smf_include.sh |
26 |
26 |
27 # SMF_FMRI is the name of the target service. This allows multiple instances |
27 # SMF_FMRI is the name of the target service. This allows multiple instances |
38 } |
38 } |
39 |
39 |
40 MYSQLCNF=`getproparg mysql/cnf` |
40 MYSQLCNF=`getproparg mysql/cnf` |
41 MYSQLBIN=`getproparg mysql/bin` |
41 MYSQLBIN=`getproparg mysql/bin` |
42 MYSQLDATA=`getproparg mysql/data` |
42 MYSQLDATA=`getproparg mysql/data` |
43 PIDFILE=${MYSQLDATA}/`/usr/bin/uname -n`.pid |
43 STARTTIMEOUT=180 |
44 |
44 |
45 if [ -z ${MYSQLCNF} ]; then |
45 if [ -z ${MYSQLCNF} ]; then |
46 echo "mysql/cnf property not set" |
46 echo "mysql/cnf property not set" |
47 exit $SMF_EXIT_ERR_CONFIG |
47 exit $SMF_EXIT_ERR_CONFIG |
48 fi |
48 fi |
65 if [ ! -d ${MYSQLDATA}/mysql ]; then |
65 if [ ! -d ${MYSQLDATA}/mysql ]; then |
66 echo ${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} |
66 echo ${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} |
67 ${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} |
67 ${MYSQLBIN}/mysql_install_db --user=mysql --datadir=${MYSQLDATA} |
68 fi |
68 fi |
69 |
69 |
|
70 |
|
71 getpidfile() { |
|
72 ret=$(${MYSQLBIN}/my_print_defaults --defaults-file=${MYSQLCNF} \ |
|
73 mysqld | grep '^--pid-file=' | cut -d= -f2- | tail -1) |
|
74 [ -z "$ret" ] && ret="${MYSQLDATA}/$(/usr/bin/uname -n).pid" |
|
75 echo $ret |
|
76 } |
|
77 |
|
78 getsockfile() { |
|
79 ret=$(${MYSQLBIN}/my_print_defaults --defaults-file=${MYSQLCNF} \ |
|
80 mysqld | grep '^--socket=' | cut -d= -f2- | tail -1) |
|
81 [ -z "$ret" ] && ret="/tmp/mysql.sock" |
|
82 echo $ret |
|
83 } |
|
84 |
|
85 PIDFILE=$(getpidfile) |
|
86 SOCKFILE=$(getsockfile) |
|
87 |
|
88 # ping function which return success when mysqld starts accepting connections |
|
89 # or return failure in case of timeout after $STARTTIMEOUT seconds. |
|
90 # using this function in mysql_start(), method waits/blocks to mysqld is really ready, |
|
91 # which might take some time in case of recovery. |
|
92 |
|
93 mysql_pinger() { |
|
94 mysqld_safe_pid=$1 |
|
95 timer=$STARTTIMEOUT |
|
96 ret=0 |
|
97 while [ $timer -gt 0 ]; do |
|
98 sleep 1 |
|
99 ${MYSQLBIN}/mysqladmin --no-defaults --socket=${SOCKFILE} --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break |
|
100 timer=$(expr $timer - 1) |
|
101 |
|
102 # Check if mysqld_safe is still alive, if not there is no hope |
|
103 if ! kill -0 $mysqld_safe_pid >/dev/null 2>&1 ; then |
|
104 ret=1 |
|
105 break |
|
106 fi |
|
107 done |
|
108 |
|
109 # Did we timeout? |
|
110 if [ $timer = 0 ]; then |
|
111 echo "MySQL Database start up timeout after ${STARTTIMEOUT}s" |
|
112 ret=1 |
|
113 fi |
|
114 return $ret |
|
115 } |
|
116 |
70 # refresh method for this service is not defined because mysqld by itself |
117 # refresh method for this service is not defined because mysqld by itself |
71 # cannot accept a HUP signal to reload the configuration file my.cnf |
118 # cannot accept a HUP signal to reload the configuration file my.cnf |
72 |
119 |
73 mysql_start() { |
120 mysql_start() { |
74 echo ${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE} |
121 echo ${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE} |
75 ${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE} > /dev/null & |
122 ${MYSQLBIN}/mysqld_safe --defaults-file=${MYSQLCNF} --user=mysql --datadir=${MYSQLDATA} --pid-file=${PIDFILE} > /dev/null & |
76 |
123 |
77 } |
124 if mysql_pinger $! ; then |
78 |
125 echo "Starting service MySQL" |
79 |
126 else |
80 mysql_stop() { |
127 echo "Failed to start service MySQL" |
81 if [ -f ${PIDFILE} ]; then |
128 exit $SMF_EXIT_ERR |
82 smf_kill_contract $1 KILL 1 30 |
129 fi |
83 fi |
|
84 } |
130 } |
85 |
131 |
86 case "$1" in |
132 case "$1" in |
87 'start') |
133 'start') |
88 mysql_start |
134 mysql_start |
89 ;; |
135 ;; |
90 |
136 |
91 'stop') |
|
92 mysql_stop $2 |
|
93 ;; |
|
94 |
|
95 |
|
96 *) |
137 *) |
97 echo "Usage: $0 {start|stop}" |
138 echo "Usage: $0 start" |
98 exit 1 |
139 exit 1 |
99 ;; |
140 ;; |
100 |
141 |
101 esac |
142 esac |
102 exit $SMF_EXIT_OK |
143 exit $SMF_EXIT_OK |