Shell编程-案例一(数据库备份服务监测)

news2024/10/22 23:47:06

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,只有由于命令比较单一,只能实现比较简单的功能。如果我们把多个操作都放到一起去,并添加更复杂的逻辑在里面,他就是Shell编程。所以我们主要从以下几个方面讲解Shell编程:

Shell编程-什么是shell

Shell编程-变量

Shell编程-数据类型

Shell编程-逻辑判断

Shell编程-if判断

Shell编程-if和else

Shell编程-while循环

Shell编程-for循环

Shell编程-case

Shell编程-break

Shell编程-continue

Shell编程--函数

Shell编程-案例(一)(本章节)

Shell编程-案例(二)

Shell编程-小结

通过前面多个小节的讲解,我们的Shell编程的基本功能都已经讲完了,后面两小节将通过4个案例来讲解Shell的实际用途。

备份MySQL数据库

在我们日常运维中,定期备份数据库,是一个很好的习惯。我们就以此为需求,来书写我们的备份脚本。

#!/bin/bash

# 设置备份目录
BACKUP_DIR="/home/backup"

# 获取当前日期
DATE=$(date +%Y-%m-%d)

# 检查备份目录是否存在,如果存在则退出
if [ -d "$BACKUP_DIR/$DATE" ]; then
    echo "备份目录已存在,放弃此次备份。"
    exit 0
fi

# 创建当天的备份目录
mkdir -p "$BACKUP_DIR/$DATE"
# 获取所有数据库列表
DATABASES=$(mysql -uroot  -e "SHOW DATABASES;" | tr -d "| " | grep -v Database)

# 遍历每个数据库进行备份
for DATABASE in $DATABASES; do
    echo "正在备份数据库:$DATABASE"
    mysqldump -uroot  $DATABASE > "$BACKUP_DIR/$DATE/${DATABASE}_${DATE}.sql"
done

echo "备份完成。"

脚本解释

  1. 定义了2个变量,定义了备份存储路径和备份时间

  2. 为了避免一天备份多次,所以这里添加了一个if判断,如果备份目录存在,则放弃备份,避免重复备份。

  3. 备份前先创建备份存储目录。

  4. 然后通过mysql命令获取需要备份的数据库列表。

  5. 然后使用for循环把刚才获取的数据库列表依次进行循环备份,并存储在对应的目录里面。

  6. 最后打印一个完成,该脚本可以手工执行,也可以添加任务计划进行自动备份。

注:这个备份脚本是把mysql的密码写入了本地配置的,所以没有密码选项。

检查运行的服务

我们的Linux服务器需要运行服务,但是如果服务中途出现异常异常以后,怎么把它自动拉起呢?我们今天这个脚本就以zookeeper这个服务来为作为需要监测的对象。​​​​​​​

#!/bin/bash

# Zookeeper 服务地址和端口
ZK_SERVER="localhost 2181"

# 日志文件路径
LOG_FILE="/tmp/zookeeper_check.log"

# 检查 Zookeeper 状态
echo "Checking Zookeeper status..."
status=$(echo ruok | nc $ZK_SERVER | grep -i imok)

current_time=$(date +"%Y-%m-%d %H:%M:%S")
if [ -n "$status" ]; then
    echo "[$current_time] Zookeeper is running properly." | tee -a $LOG_FILE
else
    echo "[$current_time] Zookeeper is not running or in an abnormal state. Attempting to restart..." | tee -a $LOG_FILE
    # 重启 Zookeeper 的命令,根据实际情况修改
    /home/apache-zookeeper-3.8.4-bin/bin/zkServer.sh start
    if [ $? -eq 0 ]; then
        echo "[$current_time] Zookeeper restarted successfully." | tee -a $LOG_FILE
    else
        echo "[$current_time] Failed to restart Zookeeper." | tee -a $LOG_FILE
    fi
fi

脚本解释

1.还是首先定义了2个变量,一个是需要检查的zk地址,另外一个是检查日志输出路径。

2.通过zookeeper的四字命令,检查zk的状态,然后把这个zk的状态值传给一个变量。

3.再次定义了一个当前时间的变量,用于后面输出到日志里面打印时间。

4.通过一个if判断,判断zk的状态是否满足预期,如果满足预期,则说明zk是正在运行中,并将日志输出到日志里面

5.如果不满足预期,则说明zk未运行,就执行启动zk服务。

6.再次判断启动启动命令的执行情况,无论结果如何都输出到日志里面。

总结

  1. 这些脚本都是还有优化空间的,比如mysql备份如果备份了怎么办,也没有输出日志,都不知道备份情况。

  2. 在zookeeper的四字命令里面,其实用stat也可以,但是这个命令在高负载的情况下可能会失败,用auok是没问题的。

  3. 在Linux里面其实实现同一个功能,实际上是有不同的实现方法的。

图片

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Multisim三极管B放大系数放大倍数测量电路设计(含仿真和报告)

【全套资料.zip】三极管B放大系数放大倍数测量电路电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.用三个数码管显示B的大小,分别显示个位、十位和百位。 2.显示范围…

springboot041师生健康信息管理系统(论文+源码)_kaic

摘 要 随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合。 本论文主要介绍基于java的师生健康信息管理系统,运用软件工程原理和开发方法,采用springboot框架…

C++ 进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后,现在我们进行对类相关特性的深入探讨! 🔥🔥🔥【C】类的默认成员函数:深入剖析与应用(上) 【C】类的默认成员函数:深入剖…

【凸优化】Legendre变换、共轭函数、对偶

推荐文章 [凸优化-凸共轭]Legendre and Legendre-Fenchel transforms - 知乎 (zhihu.com) 一、Legendre变换 1、几何解释1 Legendre 变换通过选择斜率 作为新的自变量,将函数描述为它的斜率与相应的 x 的函数值之间的关系。几何上,它可以理解为用函…

Vert.x,认证与授权 - HTTP基本认证

几乎所有的线上系统都离不开认证和授权,Vert.x auth相关组件提供了丰富(Session,JTW, OAuth,…),便捷的认证和授权支持。 当前,使用最多是Web应用,所以在后续讨论中,都是关于Vert.x auth在Web应…

kernel32.dll下载地址:如何安全地恢复系统文件

关于从网络上寻找kernel32.dll的下载地址,这通常不是一个安全的做法,而且可能涉及到多种风险。kernel32.dll是Windows操作系统的核心组件之一,负责内存管理、进程和线程管理以及其他关键系统功能。因为kernel32.dll是系统的基础文件&#xff…

IDEA如何给debug断点加上筛选条件判断

前言 我们在使用IDEA开发Java应用时,经常是需要进行代码调试的,这就需要打断点进行操作。但有些时候,我们只希望在符合某种条件的情况下,才去到这个断点,不符合的情况下,直接跳过断点,这其实也…

【linux】线程 (三)

13. 常见锁概念 (一)了解死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程占有的,且不释放的资源,而处于的一种永久等待状态 (二)死锁四个必要条件 互斥条件…

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础:神经网络、训练过程与激活函数 引言: 深度学习作为机器学习的一个子领域,近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构,使得计算机能够从数据中学习复杂的模式和特征,…

COLA架构生成DDD项目

1.下载代码 https://github.com/alibaba/COLA 2.执行命令 2.1 shell Linux mvn archetype:generate \-DgroupIdcom.xxc \-DartifactIdcola-springboot-demo \-Dversion0.0.1 \-Dpackagecom.xxc.demo \-DarchetypeArtifactIdcola-framework-archetype-web \-DarchetypeGrou…

我是类(最终版)

文章目录 再看构造函数类型转换static静态成员友元内部类匿名对象对象拷贝时的编译器优化 再看构造函数 本标题的目的是解决如下问题:当实现MyQueue时,我们不需要写默认构造函数,因为编译器会调用Stack的默认构造,但是&#xff0…

01 设计模式-创造型模式-工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式…

vue 页面导出gif图片 img 导出gif 超简单~

1.首先需要新建一个文件件 新建gif文件夹。这两个文件在文章最后面需要可自提 2.出gif分为两种情况 第一种情况 页面是img标签,直接导出图片作为gif 第二种情况 页面是div标签,需要导出div里面的图片作为gif 2.1页面是img标签,直接导出图…

电脑异常情况总结

文章目录 笔记本无症状息屏黑屏 笔记本无症状息屏黑屏 🍎 问题描述: 息屏导致黑屏;依次操作计算机--》右键--》管理--》事件查看器--》Windows日志--》系统;从息屏到异常黑屏之间出现了很多错误,如下:事件…

使用CMake生成动态链接库(.dll和.so)和静态链接库(.lib和.a)的方法

(一)简介 对于大型软件开发,动态连接库是必不可少的。不仅可以实现模块的封装,而且可以实现软件的热更新(即替换windows下的.dll或Linux下的.so文件后直接实现软件更新,无需重新编译)。有时也需…

力扣 困难 52.N皇后II

文章目录 题目介绍题解 题目介绍 题解 法一:返回51题N皇后List的长度 法二: class Solution {private int n, ans;private boolean[] onPath, diag1, diag2;public int totalNQueens(int n) {this.n n;onPath new boolean[n];diag1 new boolean[n * …

Standard IO

为了提高可移植性,将通用IO接口经过再封装就形成了标准IO,标准IO不仅适用于Unix环境,也兼容非Unix环境,这也是为什么说我们应该尽可能的使用标准IO,通用IO通过文件描述符fd来与文件交互,为了以示区分&#…

element plus e-table表格中使用多选,当翻页时已选中的数据丢失

摘要: 点击第一页选中两个,再选择第二页,选中,回到第一页,之前选中的要保留! element ui table 解决办法: :row-key“getRowKeys” (写在el-table中) methods中声明 ge…

多一DY4100数字式接地电阻测试仪使用测量方法

接地电阻二线法测量步骤 1、找出一套简易测试线,一根红色两插头线和一根短绿线; 2、找出一根辅助地钉,距离被测接地桩/扁铁约五米远整根打下去; 3、绿线插头接仪器E孔(绿色孔),夹子夹需测的接…

ArcGIS002:软件自定义设置

摘要:本文详细介绍安装arcgis10.2后软件自定义设置内容,包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。 一、工具条的启用 依次点击菜单栏【自定义】->【工具条】,根据工作需求勾…