该脚本只针对多实例的MySQL,并且有一定的限制,是基于http://coosh.blog.51cto.com/6334375/1735271 这篇安装结果。

[root@vmtest ~]# cd /disk2/mysql_multi_instances/3306
[root@vmtest 3306]# vi mysql_server.sh
#!/bin/bash
#2016-01-15 version 1
#
#2016-01-15 version 2
#the script has modified, no need to place with the socket file and my.cnf file any more. and the 
#usage is changed also. Exemple: mysql_server start 3307; mysql_server restart 3307;

export ACTION=$1
export PORT=$2
export MULTI_THREAD_DIR=/disk2/mysql_multi_instances
export CNFFILE=$MULTI_THREAD_DIR/$PORT/my.cnf
export SOCKFILE=$MULTI_THREAD_DIR/$PORT/mysql.sock

function start()
{
        [ -r $CNFFILE -a -s $CNFFILE ] && mysqld_safe --defaults-file=$CNFFILE &>/dev/null &
        if [ $?==0 ]; then
                echo 'Mysql started!'
        else
                echo 'Mysql start failed...'
        fi
}

function stop()
{
        if [ -S $SOCKFILE ]; then
                echo -e 'MySql is running.\nPlease enter root password to shut it down';
                 mysqladmin -uroot -p -S $SOCKFILE shutdown ;
                if [ $? -ne 0 ]; then
                        echo 'Wrong Password! Please redo the command';
                        exit 64 ;
                else
                        echo 'MySql graceful shutdown!'
                fi
        else
                echo "MySql isn't running.."
        fi
}

case $ACTION in
start)
        start ;
        ;;
stop)
        stop ;
        ;;
restart)
        stop ;
        start ;
        ;;
*)
        echo "Usage $0 start portnum|stop portnum|restart portnum"
        ;;
esac


运行结果

优雅关闭

[root@vmtest 3306]# ss -tlnp | grep 330    
0      128 *:3306 *:*      users:(("mysqld",13363,12))
0      128 *:3307 *:*      users:(("mysqld",30319,12))
0      128 *:3308 *:*      users:(("mysqld",32016,12))
[root@vmtest 3306]# ./mysql_server.sh stop 3306
MySql is running.
Please enter root password to shut it down
Enter password: 
MySql graceful shutdown!
[root@vmtest 3306]# ss -tlnp | grep 330
0      128 *:3307 *:*      users:(("mysqld",30319,12))
0      128 *:3308 *:*      users:(("mysqld",32016,12))


启动

[root@vmtest 3306]# ./mysql_server.sh start
Mysql started!
[root@vmtest 3306]# ss -tlnp | grep 330    
0      128 *:3306 *:*      users:(("mysqld",14834,12))
0      128 *:3307 *:*      users:(("mysqld",30319,12))
0      128 *:3308 *:*      users:(("mysqld",32016,12))
[root@vmtest 3306]# ./mysql_server.sh restart 3306
MySql is running.
Please enter root password to shut it down
Enter password: 
MySql graceful shutdown!
Mysql started!
[root@vmtest 3306]# ss -tlnp | grep 330      
0      128 *:3306 *:*      users:(("mysqld",15585,12))
0      128 *:3307 *:*      users:(("mysqld",30319,12))
0      128 *:3308 *:*      users:(("mysqld",32016,12))


重启(注意上面的3306的pid是15585)

[root@vmtest 3306]# ./mysql_server.sh restart 3306
MySql is running.
Please enter root password to shut it down
Enter password: 
MySql graceful shutdown!
Mysql started!
[root@vmtest 3306]# !ss
ss -tlnp | grep 330
0      128 *:3306 *:*      users:(("mysqld",16337,12))
0      128 *:3307 *:*      users:(("mysqld",30319,12))
0      128 *:3308 *:*      users:(("mysqld",32016,12))


如果输错了密码,程序会推出

[root@vmtest 3306]# ./mysql_server.sh restart 3306
MySql is running.
Please enter root password to shut it down
Enter password: 
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
Wrong Password! Please redo the command