zoukankan      html  css  js  c++  java
  • 编写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...
    "
     74       exit
     75     fi
     76 }
     77 
     78 #stop function
     79 function_stop_mysql(){
     80     if [ ! -e "$mysql_sock" ];then
     81        printf "MySQL is stopped...
    "
     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..
    "
     99         function_start_mysql
    100     else
    101         printf "Restarting MySQL...
    "
    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}
    "
    126 esac
  • 相关阅读:
    3D游戏常用技巧Normal Mapping (法线贴图)原理解析——高级篇
    [工作积累] OpenGL ES3.0: glInvalidateFramebuffer
    引擎设计跟踪(九.14.2c) 最近一些小的更新
    引擎设计跟踪(九.14.2b) 骨骼动画基本完成
    最近在玩的游戏
    引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复
    [工作积累] Google/Amazon平台的各种坑
    [工作积累] NDK通过Java获取package name 和version
    [工作记录] Android OpenSL ES: references & AAC related
    [工作记录] Android OpenGL ES: non-square texture
  • 原文地址:https://www.cnblogs.com/meizy/p/mysql_start_code.html
Copyright © 2011-2022 走看看