脚本原理:

 启动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多实例启动脚本的更多相关文章

  1. MySQL 多实例启动和关闭脚本

    DB: 5.5.14 OS:CentOS 6.3 在MySQL多实例中,一个一个启动灰常麻烦,因此写个简单的启动和关闭脚本 启动脚本:start.sh #!/bin/bash for port in ...

  2. mysql 5.7 启动脚本

    最近这段时间,在看mysql,安装了,也应用过,对于生产环境中,一般都选择使用source code安装,在安装的时候可以自定义相关路径和内容,对于生产环境来说更有效.相对于mysql 5.5的安装, ...

  3. mysql多实例启动过程

    单机多实例,是基本的测试环境 01.myslq提供单机管理多节点 02.启动mysql多实例 03.观察进程

  4. mysql多实例启动、关闭

    启动(指定参数文件): [root@mysql01 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf & [root@mysql01 ~]# ...

  5. MySQL多实例启动停止

    原文地址:http://wolfword.blog.51cto.com/4892126/1241304/ 说明:本实验以MySQL 5.1为例来实验. 1.安装MySQL 5.1 yum instal ...

  6. mysql多实例安装脚本

    #! /bin/bash # v.mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz # only install master mysql # time:2016-0 ...

  7. Mariadb多实例启动脚本

    #!/bin/bash port=3306 mysql_user="root" mysql_pwd="centos" cmd_path="/app/m ...

  8. mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制

    [root@DB-S ~]# ll /usr/local/|grep mysql lrwxrwxrwx. 1 root root 21 Jun 14 01:52 mysql -> /alidat ...

  9. Mysql多实例 安装以及配置

    MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...

随机推荐

  1. 深入理解java虚拟机笔记Chapter8

    运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法 ...

  2. 我进金山wps啦!

    成功进入金山wps暑期精英训练营,希望能够学到很多知识,写这篇文章纪念一下

  3. seldom 1.0 发布

    seldom 是我几个月前重启的Web UI 自动化开源项目,源项目名 pyse, 基于 unittest 和 selenium 的自动化测试框架. seldom 1.0 做为第一个正式版做了以下改进 ...

  4. python 日期与字符串之间的转换

    1.str转换为datetime >>> from datetime import datetime >>> cday = datetime.strptime('2 ...

  5. Jenkins 进阶篇 - 数据备份

    随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...

  6. 【NX二次开发】获取两个面之间的所有面

    已知两个蓝色面,使用遍历面的方法求紫色面.算法例子: 1 bool is_NeighborFace(tag_t tagFace1, tag_t tagFace2) 2 { 3 vector<ta ...

  7. CentOS 7服务管理

    CentOS 6 使用service 管理指令: service 服务名 [start | stop | restart | reload | status] 但在 CentOS7.0 后 不再使用 ...

  8. 《电容应用分析精粹:从充放电到高速PCB设计》最新勘误表

    最新勘误表百度云盘下载 链接: https://pan.baidu.com/s/18yqwnJrCu9oWvFcPiwRWvA  提取码: x3e3    (本勘误表仅包含错误相关部分,不包含对语句的 ...

  9. 12-1 MySQL数据库备份(分库)

    #!/bin/bash source /etc/profile DATE="$(date +%F_%H-%M-%S)" DB_IP="172.16.1.122" ...

  10. 5、linux分区

    5.1.分区的选择: 5.2.文件系统: ext2.ext3.ext4 5.3.分区的类型(MBR): 硬盘的使用前需要分区-格式化(创建文件系统)-存放数据: 一块硬盘: 主分区(必须有,最多4个) ...