当前位置: 首页 > news >正文

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 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.lryc.cn/news/105470.html

相关文章:

  • vue3搭建(vite+create-vue)
  • 服务器中了360后缀勒索病毒怎么解决,360后缀勒索病毒解密数据恢复
  • 3000字详解:风控核心岗位及核心价值
  • fiddler 手机抓包(含https) 完整流程
  • ChatGPT学python——制作自己的AI模型(一)初步了解
  • 多赛道出海案例,亚马逊云科技为企业提供全新解决方案实现高速增长
  • 异步消息传递技术 JMS AMQP MQTT
  • 利用Python实现汉译英的三种方法
  • 磁盘均衡器:HDFS Disk Balancer
  • 蔚小理新势力互联网造车在CAN FD硬件主框架及后装控制方案开发
  • 左叶子之和
  • Java版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台qt
  • LeetCode343. 整数拆分
  • 单机,集群和分布式概念
  • 小目标检测(1)——大恒(DaHeng)相机操作与控制编程
  • 异步实现邮件发送
  • 【Redis】内存数据库Redis进阶(Redis分片集群)
  • 替代LT8711龙讯替代RTD2172 CS5265中文规格书4K60HZ转接线 设计Type-C转HDMI2.0高清投屏方案
  • HCIA-datacom数通题库和录播视频资料
  • 优思学院|质量工程师应具备什么能力?
  • 数据分析 VS 数据可视化:决战时刻
  • Vue3中无法为el-tree-select设置反选问题分析
  • Redis - 缓存持久化
  • Pandas进阶修炼120题-第三期(金融数据处理,51-80题)
  • 3、HAproxy高级配置
  • tcpdump网络抓包工具的使用
  • AMEYA360旗下品牌:日本SUSUMU推出RGV系列贴片电阻器新产品
  • git-版本控制器
  • 台式机/工控机通过网线共享笔记本电脑无线网络linux系统下 usb网卡的驱动安装
  • kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示