编写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多实例启动脚本的更多相关文章
- MySQL 多实例启动和关闭脚本
DB: 5.5.14 OS:CentOS 6.3 在MySQL多实例中,一个一个启动灰常麻烦,因此写个简单的启动和关闭脚本 启动脚本:start.sh #!/bin/bash for port in ...
- mysql 5.7 启动脚本
最近这段时间,在看mysql,安装了,也应用过,对于生产环境中,一般都选择使用source code安装,在安装的时候可以自定义相关路径和内容,对于生产环境来说更有效.相对于mysql 5.5的安装, ...
- mysql多实例启动过程
单机多实例,是基本的测试环境 01.myslq提供单机管理多节点 02.启动mysql多实例 03.观察进程
- mysql多实例启动、关闭
启动(指定参数文件): [root@mysql01 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf & [root@mysql01 ~]# ...
- MySQL多实例启动停止
原文地址:http://wolfword.blog.51cto.com/4892126/1241304/ 说明:本实验以MySQL 5.1为例来实验. 1.安装MySQL 5.1 yum instal ...
- mysql多实例安装脚本
#! /bin/bash # v.mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz # only install master mysql # time:2016-0 ...
- Mariadb多实例启动脚本
#!/bin/bash port=3306 mysql_user="root" mysql_pwd="centos" cmd_path="/app/m ...
- mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制
[root@DB-S ~]# ll /usr/local/|grep mysql lrwxrwxrwx. 1 root root 21 Jun 14 01:52 mysql -> /alidat ...
- Mysql多实例 安装以及配置
MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...
随机推荐
- 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断
1.什么是ref? 1.ref和reactive-样 也是用来实现响应式数据的方法 由于reactive必须传递一个对象, 所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦 所以V ...
- Atcoder rc122-c Calculator 斐波那契
传送门 题解 先说结论: 任意正整数可以拆分成若干个斐波那契数 斐波那契数列: 1 1 2 3 5 8 13 21 34 例 17 = 13 + 3 + 1 看上去是对的,怎么证明呢? 首先假如每一个 ...
- P2365 任务安排
题目描述 n 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 n 个任务被分成若干批,每批包含相邻的若干任务. 从零时刻开始,这些任务被分批加工,第 i 个任务单独完成所需的时间为 ti ...
- 九、部署audit监控文件
审计的目的是基于事先配置的规则生成日志,记录可能发生在系统上的事件(正常或非正常行为的事件),审计不会为系统提供额外的安全保护,但她会发现并记录违反安全策略的人及其对应的行为. 审计能够记录的日志内容 ...
- 阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法
作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 ...
- 【NX二次开发】 获取产品曲面上多个点对应的面的垂直矢量!
说明:选择一个产品面,选择面上的点,生成点在此面上的法线反向,生成直线.生成矢量的起点坐标,和矢量方向信息.可用于三坐标测量,如果需要可以自己编个插件用! 效果图: 源码: //----------- ...
- 【NX二次开发】导入x_t,UF_PS_import_data
导入x_t,导入XT后要UF_DISP_regenerate_display(); 更新显示 否则不会显示 string strPaths ="D:\\1.x_t"; char s ...
- mybatis-generator的使用心得
之前开发了一个亚健康测评系统,使用的是SSM框架,里面第一次使用到了mybatis-generator逆向代码生成工具,很方便,省去了基本的增删改查的mapper文件及sql的编写,还能避免错误,这里 ...
- c#将图片Image转换为内存流MemoryStream
HttpWebResponse resp = (HttpWebResponse)wRequest.GetResponse(); Stream stream = resp.GetResponseStre ...
- 如何在国产龙芯架构平台上运行c/c++、java、nodejs等编程语言
高能预警:本文内容过于硬核,涉及编译器原理.cpu指令集.机器码.编程语言原理.跨平台原理等计算机专业基础知识,建议具有c.c++.java.nodejs等多种编程语言开发能力,且实战经验丰富的资深开 ...