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

news/2024/11/25 4:40:21/

已知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 1usage(){echo “USAGE: $0 {start|stop|restart}exit 1
}if [ $# -ne 1 ]thenusage
fistart() {mysqld_safe --user=mysql >/dev/null 2>&1 &if [ $? -eq 0 ]thenaction "start mysql" /bin/trueelseaction "start mysql" /bin/falsefi
}stop() {mysqladmin -uroot -pChang123 shutdown >/dev/null 2>&1if [ $? -eq 0 ]thenaction  "stop mysql" /bin/trueelseaction "stop mysql" /bin/falsefi
}restart() {stopsleep 2start
}if [ "$1" == "start" ]thenstart
elif [ "$1" == "stop" ]thenstop
elif [ "$1" == "restart" ]thenrestart
elseusage
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 ]thenecho "Starting MySQL..."/bin/sh ${CmdPath}/mysqld_safe --defaults-fle=/data/${Port}/my.cnf 2>&1 >/dev/null &elseecho "MySQL is running..."
}#stop function
stop(){if [ `netstat -atunlp |grep "$Port" | wc -l` -eq 0 ]thenecho "Stopping MySQL..."${CMDPath}/mysqladmin -u ${MysqlUser} -p {$MysqlPassword} -S /data/${Port}/mysql.sock shutdownelseecho "MySQL is stopped..."fi
}#restart function
restart(){echo "Restarting MySQL..."stopsleep 2start
}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 \ 


http://www.ppmy.cn/news/1001350.html

相关文章

Unity实现物体上下漂浮旋转效果

效果展示 代码(直接挂载在物体上就可以了) using System.Collections; using System.Collections.Generic; using UnityEngine;public class FloatingObject : MonoBehaviour {public float amplitude 0.5f; // 上下移动的幅度public float frequency …

windows上给oracle打补丁注意事项

打补丁的过程 1、升级opatch工具,检查剩余空间用于存放ORACLE_HOME的备份,设置oracle_home环境变量,通过readme中的先决条件来检查现有补丁是否和本次补丁冲突 2、opatch apply 升级数据库软件,这个必须数据库文件不要被进程调用 在windows上…

java+springboot+mysql个人日记管理系统

项目介绍: 使用javaspringbootmysql开发的个人日记管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人…

windows下mysql的下载与安装

文章目录 1 下载2 安装目录下新建data文件夹和my.ini3 安装4设置密码与远程连接5 配置环境变量6 navicate连接成功 1 下载 官网地址 https://www.mysql.com/点击下载 社区下载 社区服务 选择版本下载 2 安装目录下新建data文件夹和my.ini my.ini 内容如下 [mysql] # 设置my…

【Android】使用 CameraX 实现基础图像分析功能

1. 基础开发环境 JDK:JDK17 Android Studio:Android Studio Giraffe | 2022.3.1 Android SDK:Android API 34 Gradle: gradle-8.0-bin.zip CameraX Version: 1.1.0-alpha05 2. 添加相关依赖 在 build.gradle 中添加 CameraX 的相关依赖 // *…

如何优雅的使用后端接口

优雅的后端接口 一个后端接口大致分为四个部分:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响 应数据(response)。 一、URL & Method Rest 设计风格 ===》 Restful API 简单理解: URI 是用来唯一标志一个互联网资源;Method 是用来标识当前请求对该…

快速部署外卖系统:利用现代工具简化开发流程

在竞争激烈的外卖市场中,快速部署高效稳定的外卖系统是餐饮企业成功的关键之一。本文将介绍如何利用现代工具简化外卖系统的开发流程,并附带代码示例,帮助开发者快速搭建功能完备、用户友好的外卖平台。 1. 简介 在外卖业务快速增长的背景…

【C++】unordered_map在Windows和Linux上的不同行为

我目前手头上的项目,需要编译在板端Linux上运行,但是日常daily调试多在Windows上开发。这就涉及到同一份代码在多平台上的编译个运行。有一次遇到了一个奇怪的现象:跑同样的一份代码,Windows和Linux出来的结果是不一致的。最终确定…