Shell脚本学习-MySQL单实例和多实例启动脚本

已知MySQL多实例启动命令为:

mysqld_safe --defaults-file=/data/3306/my.cnf &

停止命令为:

mysqladmin -uroot -pchang123 -S /data/3306/mysql.sock shutdown

请完成mysql多实例的启动脚本的编写:

问题分析:

要想写出脚本,必须对MySQL服务很熟悉。

1)单实例:

# Mysql启动
mysqld_safe &

# Mysql停止
mysqld_admin -u root -p Chang123 shutdown
# 设置root密码
[root@vm1 scripts]# mysqladmin -uroot password "Chang123"

# 先将mariadb停止
[root@vm1 scripts]# mysqladmin -uroot -pChang123 shutdown

# 检查进程是否停止
[root@vm1 scripts]# netstat -atunlp |grep 3306

# 再启动mysql
[root@vm1 scripts]# mysqld_safe --user=mysql &
[1] 11535
[root@vm1 scripts]# 230802 21:49:37 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
230802 21:49:37 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql


# 再检查mysql进程是否已启动
[root@vm1 scripts]# netstat -atunlp |grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      11681/mysqld   

先是单实例的启动脚本的编写:

[root@vm1 scripts]# cat start_db.sh
#!/bin/bash
#

[ -f /etc/init.d/functions ] && . /etc/init.d/functions || echo 1

usage(){
  echo “USAGE: $0 {start|stop|restart}
  exit 1
}

if [ $# -ne 1 ]
  then
    usage
fi

start() {
  mysqld_safe --user=mysql >/dev/null 2>&1 &
  if [ $? -eq 0 ]
    then
      action "start mysql" /bin/true
  else
      action "start mysql" /bin/false
  fi
}

stop() {
  mysqladmin -uroot -pChang123 shutdown >/dev/null 2>&1
  if [ $? -eq 0 ]
    then
      action  "stop mysql" /bin/true
  else
      action "stop mysql" /bin/false
  fi
}

restart() {
  stop
  sleep 2
  start
}


if [ "$1" == "start" ]
  then
    start
elif [ "$1" == "stop" ]
  then
    stop
elif [ "$1" == "restart" ]
  then
    restart
else
    usage
fi

执行结果:

[root@vm1 scripts]# netstat -atunlp |grep 3306
[root@vm1 scripts]#
[root@vm1 scripts]# sh start_db.sh start
start mysql                                                [  OK  ]
[root@vm1 scripts]# 230802 22:17:56 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
230802 22:17:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

[root@vm1 scripts]# sh start_db.sh restart
stop mysql                                                 [  OK  ]
start mysql                                                [  OK  ]
[root@vm1 scripts]# 230802 22:18:19 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
230802 22:18:19 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

[root@vm1 scripts]#

将一些信息都不显示出来: 

[root@vm1 scripts]# sh start_db.sh start
start mysql                                                [  OK  ]
[root@vm1 scripts]# sh start_db.sh stop
stop mysql                                                 [  OK  ]


[root@vm1 scripts]# sh start_db.sh restart
stop mysql                                                 [  OK  ]
start mysql                                                [  OK  ]


[root@vm1 scripts]# netstat -atunlp |grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      13173/mysqld   

多实例启动脚本:

[root@vm1 scripts]# cat mysql_manage.sh
#!/bin/bash
#
Port=3306
MysqlUser="root"
MysqlPassword="Chang123"
CmdPath="/usr/local/mysql/bin"

#start function
start() {
  if [ `netstat -auntlp |grep "$Port" | wc -l` -eq 0 ]
    then
      echo "Starting MySQL..."
      /bin/sh ${CmdPath}/mysqld_safe --defaults-fle=/data/${Port}/my.cnf 2>&1 >/dev/null &
  else
      echo "MySQL is running..."
}

#stop function
stop(){
  if [ `netstat -atunlp |grep "$Port" | wc -l` -eq 0 ]
    then
      echo "Stopping MySQL..."
      ${CMDPath}/mysqladmin -u ${MysqlUser} -p {$MysqlPassword} -S /data/${Port}/mysql.sock shutdown
  else
      echo "MySQL is stopped..."
  fi
}


#restart function
restart(){
  echo "Restarting MySQL..."
  stop
  sleep 2
  start
}


case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    restart
    ;;
*)
   echo "USAGE: $0 {start|stop|restart}"
esac

代码说明:

1)其中使用了case语句。

把这个脚本放到/etc/init.d/目录中,实现/etc/init.d/mysqld01 start 启动,并通过chkconfig对其设置开机自启动和关闭。

如果自己写脚本,也就是放到/etc/init.d目录中,作为启动脚本。

在脚本中添加这块内容,设置mysql的开机自启动。

# chkconfig: 2345 20 80
# description: Start mysql and stop mysql script.

man chkconfig,看看chkconfig的帮助文档。

 

2345是运行的级别。

20:启动优先级

80: 停止优先级

你应该能指出descripion的内容。\ 反斜线是换行继续。忽略掉在行前面的空格。

多看man帮助文档。

看看/etc/init.d/rpcbind

 

 需要注意的是:数字可设置成不一样的,但是要确保启动优先级在rc.d的子目录中不要有冲突。切记。

企业面试题:

怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用?

# chkconfig 2345 21 60

# description: Save and restores system entropy pool for \ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MINIO安装(centos7)

步骤1:安装wget 在开始安装MinIO之前,需要安装wget命令行工具。可以使用以下命令在CentOS系统中安装wget: sudo yum install wget 步骤2:下载MinIO wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio 将下…

分布式应用:ELK企业级日志分析系统

目录 一、理论 1.ELK 2.ELK场景 3.完整日志系统基本特征 4.ELK 的工作原理 5.ELK集群准备 6.Elasticsearch部署(在Node1、Node2节点上操作) 7.Logstash 部署(在 Apache 节点上操作) 8.Kiabana 部署(在 Node1 节点…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL(数据查询语句)3 DML(数据操纵语句)4 DDL(数据定义语句)5 DCL(数据控制语句)6 TCL(事务控制语句) 1 SQL语句简介…

面试热题(最长回文子串)

给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串 输入:s "babad" 输出:"bab" 最长回文子串以前的博客已经讲过KMP算法以及比较不常见的Manacher算法…

使用数字陷波器滤除工频信号

使用数字陷波器滤除工频信号 在实际测量时经常会受到工频信号(交流50Hz)的干扰,有时干扰还很大,有用信号完全被淹没了。可以应用数字陷波器来消除工频信号的干扰。 数字陷波器函数如下函数:iirnotch功能:数…

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载(Loading)1.2 验证(Verification)1.3 准备(Preparation)1.4 解析(Resolution)1.5 初始化(Initialization) 二、双亲委派…

【go-zero】docker镜像直接部署API与RPC服务 如何实现注册发现?docker network 实现 go-zero 注册发现

一、场景&问题 使用docker直接部署go-zero微服务会发现API无法找到RPC服务 1、API无法发现RPC服务 用docker直接部署 我们会发现API无法注册发现RPC服务 原因是我们缺少了docker的network网桥 2、系统内查看 RPC服务运行正常API服务启动,通过docker logs 查看日志还是未…

寄存器详解(一)

目录 前言: 通用寄存器 示例: 通用寄存器的划分 汇编指令 cpu物理地址的形成 地址加法器运算示例: 1. 相关部件提供段地址和偏移地址 2. 段地址和偏移地址送入地址加法器 3. 段地址*16 4. 求出物理地址 5. 输出物理地址 段的概念 Deb…

在线五子棋对战

目录 数据管理模块(数据库设计) 前端界面模块 业务处理模块 会话管理模块网络通信模块(session,cookie) 在线管理模块 房间管理模块 用户匹配模块 项目扩展 数据管理模块(数据库设计) 数据库中有可能存在很多张表&#xf…

MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图

MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息…

APP开发中的性能优化:提升用户满意度的关键

APP开发中的性能优化是需要持续进行的,它不仅能够让用户体验到 APP的使用感受,还能在一定程度上提升用户的满意度,从而提升 APP的粘性和转化率。不过在实际开发中,很多 APP开发公司会存在性能优化上的问题,这就需要了解…

[C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...

之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了Boost库文档 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…第二篇文章 分析实现了parser模块. 此模块的作用是 对所有文档html文件, 进行清理并汇总 🫦[C项目] …

【力扣每日一题】2023.8.4 不同路径3

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 在二维网格之上,让我们模拟从开头走到末尾,并且要经过所有能经过的点,问我们有多少种走法。 看到这道…

c++学习(异常)[28]

c语言处理错误机制 c异常概念 try {//保护的标识代码 }catch(ExceptionName e1) {//catch块 }catch(ExceptionName e2) {//catch块 }catch(ExceptionName eN) {//catch块 }匹配 优先调用链中最近的捕获 异常若不被捕获则报错终止程序 try { }catch ( ... ) //可以捕获任意类…

TCP的三次握手和四次挥手······详解

1、三次握手 三次握手是建立连接的过程 如图大致为三次握手的流程图: 当客户端对服务端发起连接时,会先发一个包连接请求数据,去询问能否建立连接,该数据包称为 “SYN”包 然后,如果对方同意连接,那么…

RabbitMQ:概念和安装,简单模式,工作,发布确认,交换机,死信队列,延迟队列,发布确认高级,其它知识,集群

1. 消息队列 1.0 课程介绍 1.1.MQ 的相关概念 1.1.1.什么是MQ MQ(message queue:消息队列),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制…

2024年杭州电子科技大学MEM项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段,不少考生开始持续将注意力集中在备考的规划中!杭州达立易考教育整合浙江省内的MEM目信息,为大家详细梳理了相关报考参考内容,方便大家更好完成择校以及针对性的备考工作。本期为…

史上最全docker启动命令

docker Docker 启动镜像 一、查看当前docker中下载的镜像,如下图,当前我的Docker容器中存在两个镜像 ,tomcat、mysql 二、启动镜像 (因启动命令参数过多,同时各种镜像启动时可以增加额外的参数,本次以启动mysql5.6为例…

(12)理解委托,反射,Type,EvenInfo,插件, 组合枚举,BindingFlags,扩展方法及重载,XML认识

一、复习委托事件 1、委托复习。 private delegate int MyDelegate(int a, int b); //1.定义委托类型private static void Main(string[] args){MyDelegate md new MyDelegate(AddDelegate);//2.声明委托变量int result md(1, 2);//3.调用委托Console.WriteLine(result);Cons…

Vue中默认插槽,具名插槽,作用域插槽区别详解

默认插槽&#xff1a; App.vue : 在app.vue中使用MyCategory&#xff0c;里面包裹的结构是不显示的&#xff0c;要想在页面中显示&#xff0c;就需要用到插槽。在子组件MyCategory中定义 <template><div class"container"><MyCategory title"美…