编写mysql多实例启动脚本
Posted meizy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写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
以上是关于编写mysql多实例启动脚本的主要内容,如果未能解决你的问题,请参考以下文章