脚本原理:

 启动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成长笔记:(原理+应用+源码+调优全都有)直接复盘

    今天这篇文章我为了帮助小伙伴们快速构建Java技术栈,这份笔记包含了Java技术点的答案,面经,笔记,希望大家看完可以在短期内容快速面试复盘,达到事半功倍! 本来想将文件上传到开源网站上去,但是文件太 ...

  2. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

  3. 【NX二次开发】多种变换

    变换的种类: uf5942 矩阵乘积变换 uf5943 平移变换 uf5944 缩放变换 uf5945 旋转变换 uf5946 镜像变换 最后使用 uf5947 实现uf5942-uf5946的变换. ...

  4. 【vim】常用总结

    简介 什么是vim? Linux下两大编辑神器之一 vim Linux/Unix下使用最多的编辑器 vi的改进版 可能是最难上手的编辑器之一 为什么要学习vim? 都21世纪了,为什么还需要学习vim ...

  5. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. Luatools v2烧录教程(适用于2G、4G Cat.1、4G Cat.4模块)

    目录,可以根据需要直接点击跳转: 下载LuaTools工具 2G模块烧写教程(Air2xx系列.Air8xx系列) 连接模块 刷入AT版本的lod 刷入任意的lod固件 下载lua脚本文件 [4G 模 ...

  7. 在线博客转PDF电子书 | JS爬虫初探

    最近在看一位大佬写的源码解析博客,平时上下班用手机看不太得劲,但是平板又没有网卡,所以就想搞个离线pdf版,方便通勤时间学习阅读. 所以,问题来了: 怎么把在线网页内容转成pdf? 这位大佬的博客是用 ...

  8. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  9. Kubernetes自动横向伸缩集群节点以及介绍PDB资源

    在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...

  10. Docker入门与进阶(上)

    Docker入门与进阶(上) 作者 刘畅 时间 2020-10-17 目录 1 Docker核心概述与安装 1 1.1 为什么要用容器 1 1.2 docker是什么 1 1.3 docker设计目标 ...