编写mysql多实例启动脚本
脚本原理:
启动MySQL动作:
mysqld_safe来执行启动
停止MySQL动作:
使用mysqladmin来执行停止动作
重启的MySQL动作:
原理就是先停止,然后再启动
但是要注意:简单的sleep来等待停止和启动过程极可能出现在短时间内重复运行重启,mysqld_safe报错提示已经启动了一个实例的问题
这里可以参考MySQL提供的默认启动脚本mysqld.service中的wait_for_pid()这个函数。
以下是启动脚本,效果如图:
脚本:
1 #!/bin/sh 2 #init 3 port=3306 4 mysql_user="root" 5 mysql_pwd="test" 6 CmdPath="/usr/local/mysql-5.5.62/bin/" 7 mysql_sock="/data/${port}/mysqld.sock" 8 pid_file="/data/${port}/mysqld.pid" 9 service_startup_timeout=900 10 PATH=/sbin:/usr/sbin:/bin:/usr/bin:$CmdPath:$PATH 11 export PATH 12 #print success 13 echo_info_ok(){ 14 echo -e "[\e[0;32;1m success \e[0;32;0m]" 15 } 16 17 #print faild 18 echo_info_false(){ 19 echo -e "[\e[0;31;1m failed \e[0;31;0m]" 20 } 21 #wait for pid 22 wait_for_pid(){ 23 verb="$1" # created | removed 24 pid="$2" # process ID of the program operating on the pid-file 25 pid_file_path="$3" # path to the PID file. 26 i=0 27 flag="by checking again" 28 while test $i -ne $service_startup_timeout;do 29 case "$verb" in 30 'created') 31 # wait for a PID-file to pop into existence. 32 test -s "$pid_file_path" && i='' && break 33 ;; 34 'removed') 35 # wait for this PID-file to disappear 36 test ! -s "$pid_file_path" && i='' && break 37 ;; 38 *) 39 echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path" 40 exit 1 41 ;; 42 esac 43 44 # if server isn't running, then pid-file will never be updated 45 if test -n "$pid"; then 46 if kill -0 "$pid" 2>/dev/null; then 47 : # the server still runs 48 else 49 # The server may have exited between the last pid-file check and now. 50 if test -n "$avoid_race_condition"; then 51 flag="" 52 continue # Check again. 53 fi 54 return 1 # not waiting any more. 55 fi 56 fi 57 sleep 1 58 done 59 } 60 61 #startup function 62 function_start_mysql(){ 63 if [ ! -e "$mysql_sock" ];then 64 printf "Starting MySQL..." 65 /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & 66 wait_for_pid created "$!" "$pid_file" 67 if [ $? -eq 0 ];then 68 echo_info_ok 69 else 70 echo_info_false 71 fi 72 else 73 printf "MySQL is running...\n" 74 exit 75 fi 76 } 77 78 #stop function 79 function_stop_mysql(){ 80 if [ ! -e "$mysql_sock" ];then 81 printf "MySQL is stopped...\n" 82 exit 83 else 84 printf "Stoping MySQL..." 85 ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown 86 wait_for_pid removed "$!" "$pid_file" 87 if [ $? -eq 0 ];then 88 echo_info_ok 89 else 90 echo_info_false 91 fi 92 fi 93 } 94 95 #restart function 96 function_restart_mysql(){ 97 if [ ! -e $mysql_sock ];then 98 printf "Restarting MySQL..\n" 99 function_start_mysql 100 else 101 printf "Restarting MySQL...\n" 102 function_stop_mysql 103 if [ $? -eq 0 ];then 104 function_start_mysql 105 else 106 printf "Starting MySQL" 107 echo_info_false 108 fi 109 done 110 fi 111 } 112 113 #main 114 case $1 in 115 start) 116 function_start_mysql 117 ;; 118 stop) 119 function_stop_mysql 120 ;; 121 restart) 122 function_restart_mysql 123 ;; 124 *) 125 printf "Usage: /data/${port}/mysql {start|stop|restart}\n" 126 esac
签名:人生的状态和生活的乐趣在于看事的格局和处事的胸怀以及行动的魄力!