!/bin/bash

user=root port=3306 CmdPath=/opt/mysql/bin password=xxxxxxxxxx

base_dir=/opt/mysql inst_dir=/data/3306 alive="00" sMysqld=0 sMysqldSafe=0 fSock=0 fPID=0

check_alive() { echo "running check_alive..."
if [ ps -ef | grep $port | grep -v grep | grep 'mysqld ' |awk '{print $2}' ];then echo "Process mysqld is running!" sMysqld=1 else echo "Process mysqld is not running!" sMysqld=0 fi

     if [  `ps -ef | grep 3306 | grep -v grep | grep 'mysqld_safe' |awk '{print $2}'` ];then 
     	echo "Process mysqld_safe is running!"
     	sMysqldSafe=1
 else 
	echo "Process mysqld_safe is not running!"
	sMysqldSafe=0
     fi
     
     if [ -e  ${inst_dir}/mysql.sock ];then
     	echo "socked file exists!"
     	fSock=1
 else 
	echo "socked file not exists!"
	fSock=0
     fi
     
     if [ -e  ${inst_dir}/mysql.pid ];then
     	echo "pid file exists!"
     	fPID=1
 else 
	echo "pid file  not exists!"
	fPID=0
     fi
     
     if [ $sMysqld -eq 1 ];then
     	if [ $fPID -eq 0 ];then
     		echo "PID is missing, tring to recreate..."
     		ps -ef | grep $port | grep -v grep | grep 'mysqld ' |awk '{print $2}' > ${inst_dir}/mysql.pid
     		if [ -e ${inst_dir}/mysql.pid ]; then
     			echo "pid file is created!"
     		else
     			echo "can not create PID file, please have a check!"
     		fi
     	fi
     	if [ $sMysqldSafe -eq 0 ];then
     		echo "Process mysqld_safe is missing, please have a check! May cause mysqld crash!"
     	fi
        if [ $fSock -eq 1 ];then
         	echo "MySQL running fine!!!"
         	alive="11"
        else
         	echo "socket file is missing, you may have to login without socket!"
         	alive="10"			
        fi			 		        
     else
     	echo "process mysqld is missing, mysql is stopped!"
     	if [ $fSock -eq 1 ] | [ $fPID -eq 1 ];then
     		echo "mysql was stopped abnormality!"
     		echo "cleaning socket file and pid file"
     		alive="01"
     	else
     		alive="00"
	fi
     
     fi

}

start_mysql() { check_alive printf "MySQL is starting ... \n" if [ $alive == "00" ]; then ${CmdPath}/mysqld_safe --defaults-file=${inst_dir}/my.cnf --user=${user} 2>&1 >/dev/null & else if [ $alive == "11" ]; then echo "MySQL is runnig!" else if [ $alive == "01" ]; then echo "MySQL was stopped but pid or sock file still exits!" echo "Cleanning pid or sock files!" if [ $fSock -eq 1 ];then rm -f ${inst_dir}/mysql.sock fi if [ $fPID -eq 1 ];then rm -f ${inst_dir}/mysql.pid fi echo "Tring to start MySQL again!!!" ${CmdPath}/mysqld_safe --defaults-file=${inst_dir}/my.cnf --user=${user} 2>&1 >/dev/null & fi fi fi }

stop_mysql() { check_alive printf "MySQL is Stopping...\n" if [ $alive == "11" ]; then ${CmdPath}/mysqladmin -u root -p${password} -S ${inst_dir}/mysql.sock shutdown 2>&1 >/dev/null &
else if [ $alive == "10" ]; then ${CmdPath}/mysqladmin -u root -p${password} -h $HOSTNAME -P $port --protocol tcp shutdown 2>&1 >/dev/null & else echo "MySQL is not running, no need stop!" fi
fi }

restart_mysql() { stop_mysql sleep 5 if [ $? == 0 ];then start_mysql else echo "stop mysql failed!" fi }

case $1 in

start) start_mysql ;; stop) stop_mysql
;; restart) restart_mysql ;; status) status_mysql ;; alive) check_alive ;; *) printf "Please in put start|stop|restart|status as input" ;; esac