Linux-day08
第17章 大数据定制篇-shell编程
shell编程快速入门




shell变量





设置环境变量



把行号打开 set nu

位置参数变量


预定义变量



在一个脚本中执行了另外一个脚本所以卡住了 CTRL+C退出
运算符

operator运算符



条件判断




流程控制
单分支多分支

case语句


for循环




反复的把取出来的i值累积


while循环


read获取输入
read读取控制台输入,用户动态的输入一些数据



函数

系统函数



自定义函数



定时备份数据库


为什么要把脚本放在这个目录下
因为这个目录下面是root用户执行的权限,将来也会用root身份给它设置任务调度
当代码比较多时,可以边写边测试
需求是如果BACKUP目录下没有这个以当前时间为名字的目录,就创建一个
mkdir -p指令的意思是, 确保目录名称存在,不存在的就建一个。
#!/bin/bash
# 备份目录,指定了备份文件存储的根目录
BACKUP=/data/backup/db
# 当前时间,使用 date 命令获取当前的日期和时间,格式为年-月-日_时:分:秒
DATETIME=$(date +%Y-%m-%d_%H%M%S)
# 数据库的主机(地址),这里使用的是本地主机
HOST=localhost
# 数据库用户名,使用 root 用户
DB_USER=root
# 数据库密码,此处为 *********
DB_PW=*********
# 备份的数据库名,要备份的数据库是 wujiao1
DATABASE=wujiao1# 创建备份目录,如果不存在,就创建
# [! -d "${BACKUP}/${DATETIME}" ] 是一个条件判断,用于检查备份目录是否存在
#! -d 表示目录不存在
# && 表示逻辑与,如果前面的条件为真,则执行后面的命令
# mkdir -p 命令用于创建目录,-p 选项表示如果父目录不存在,会一并创建
[! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"# 备份数据库
# mysqldump 是一个用于备份 MySQL 数据库的工具
# -u${DB_USER} 指定数据库用户名
# -p${DB_PW} 指定数据库密码
# --host=${HOST} 指定数据库所在的主机地址
# -q 表示使用安静模式,减少输出信息
# -R 表示备份存储过程和函数
# --databases ${DATABASE} 表示备份的数据库
# | 管道符,将 mysqldump 的输出传递给下一个命令
# gzip 用于压缩输出的 SQL 文件
# > 重定向操作符,将压缩后的文件存储到指定的备份目录中
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz# 将文件处理成 tar.gz
# cd ${BACKUP} 切换到备份目录
cd ${BACKUP}
# tar 命令用于打包文件和目录
# -z 表示使用 gzip 进行压缩
# -c 表示创建新的压缩包
# -v 表示显示详细信息
# -f 表示指定压缩包的名称
# $DATETIME.tar.gz 是要创建的压缩包的名称
# ${DATETIME} 是要打包的目录
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
# rm -rf 命令用于删除文件和目录,-r 表示递归删除,-f 表示强制删除
rm -rf ${BACKUP}/${DATETIME}
这个脚本的整体功能是备份 MySQL 数据库。具体步骤如下:
- 首先,定义了一些变量,包括备份目录
BACKUP、当前时间DATETIME、数据库主机HOST、数据库用户名DB_USER、数据库密码DB_PW和要备份的数据库DATABASE。 - 检查并创建备份目录。使用
[! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"确保存储备份的目录存在,如果不存在则创建它。 - 使用
mysqldump命令备份数据库。它将数据库的内容输出,通过管道传递给gzip进行压缩,并将压缩后的文件存储在${BACKUP}/${DATETIME}/$DATETIME.sql.gz中。 - 切换到备份目录,使用
tar命令将备份目录打包为tar.gz文件,以方便存储和传输。 - 最后,使用
rm -rf命令删除之前创建的备份目录,只保留最终的tar.gz文件。
需要注意的是:
- 该脚本中的数据库密码是以明文形式存储的,在安全要求较高的环境中,这样的做法可能存在安全隐患,可以考虑使用环境变量或其他更安全的方式存储密码。
- 确保
mysqldump命令在系统中可用,并且用户具有足够的权限访问数据库。 - 在使用
rm -rf删除目录时要小心,因为它会强制删除文件和目录,可能会导致误删重要数据,建议在使用前进行测试。
#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#数据库的主机(地址)
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=*********
#备份的数据库名
DATABASE=wujiao1#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf.{} \;
echo "备份数据库${DATABASE} 成功~"
认真复习一下这个案例
这一部分写的时候一定要注意空格
小结梳理
相关文章:
Linux-day08
第17章 大数据定制篇-shell编程 shell编程快速入门 shell变量 设置环境变量 把行号打开 set nu 位置参数变量 预定义变量 在一个脚本中执行了另外一个脚本所以卡住了 CTRLC退出 运算符 operator运算符 条件判断 流程控制 单分支多分支 case语句 for循环 反复的把取出来的i值…...
stack_queue的底层,模拟实现,deque和priority_queue详解
文章目录 适配器Stack的模拟实现Queue的模拟实现vector和list的对比dequedeque的框架deque的底层 priority_queuepriority_queue的使用priority_queue的底层仿函数的使用仿函数的作用priority_queue模拟实现 适配器 适配器是一种模式,这种模式将类的接口转化为用户希…...
LabVIEW 实现线路板 PCB 可靠性测试
在电子设备制造领域,线路板 PCB(Printed Circuit Board)的可靠性直接影响产品的整体性能和使用寿命。企业在生产新型智能手机主板时,需要对 PCB 进行严格的可靠性测试,以确保产品在复杂环境下能稳定运行。传统的测试方…...
sqlfather笔记
这里简单记录写学习鱼皮sqlfather项目的笔记,以供以后学习。 运行 将前后端项目clone到本地后,修改对应配置文件运行项目。 后端 1.配置好mysql后运行这个sql文件建立对应的表。 2.修改数据库密码 3.修改完后运行启动类即可 4. 启动结果 5.查看A…...
RabbitMQ(四)
SpringBoot整合RabbitMQ SpringBoot整合1、生产者工程①创建module②配置POM③YAML④主启动类⑤测试程序 2、消费者工程①创建module②配置POM③YAML文件内配置: ④主启动类⑤监听器 3、RabbitListener注解属性对比①bindings属性②queues属性 SpringBoot整合 1、生…...
【Unity3D】远处的物体会闪烁问题(深度冲突) Reversed-Z
知识点:深度冲突、像素闪烁现象、Reversed-Z(反向Z)、浮点数精度问题 前提概要:深度值都是由32位浮点数存储 原因:深度冲突,多个物体之间无法正确地渲染远近关系,出现上一帧可能是A物体在B物体…...
探索与创作:2024年CSDN平台上的成长与突破
文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…...
QT笔记- Qt6.8.1 Android编程 添加AndroidManifest.xml文件以支持修改权限
1. 切换项目选项卡,找到构建的步骤下的最后一项构建安卓APK,展开后找到应用程序栏,点击安卓自定义中的创建模板. 2. 弹出对话框勾选图中选项后点完成 3. 回到项目,查看.pro文件,里面多了很多内容不管,在下…...
【Leetcode 每日一题 - 扩展】421. 数组中两个数的最大异或值
问题背景 给你一个整数数组 n u m s nums nums,返回 n u m s [ i ] X O R n u m s [ j ] nums[i]\ XOR\ nums[j] nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 0 ≤ i ≤ j < n 0≤i≤j<n。 数据约束 1 ≤ n u m s . l e n g…...
计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解
关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…...
C#如何调用执行命令行窗口(CMD)
一、引言 在 C# 的编程世界里,我们常常会遇到需要与操作系统底层进行交互的场景。这时,调用命令行窗口(CMD)就成为了一个强大的工具。无论是自动化日常任务,还是执行外部程序和批处理文件,通过 C# 调用 CM…...
vim练级攻略(精简版)
vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格,tab&am…...
一文速通Java的JDBC编程
目录 🐽JDBC的引入 什么是API JDBC的概念及作用 🍇准备工作 数据库驱动包 下载第三方库 🐾JDBC 使用 将jar包导入项目 通过代码使用JDBC的API (1)创建数据源对象并设置属性 (2)和数据库服务器建立网络连接 (3)程序构造SQL语句 (…...
laravel中请求失败重试的扩展--Guzzle
背景 开发过程中,跟外部接口对接时,很常见的要考虑到失败重新的情况,这里记录一下我用的失败重试的情况, 重试方法 1、使用 Laravel 的 HTTP 客户端和异常处理 结合异常处理和重试逻辑 use Illuminate\Support\Facades\Http;…...
如何在vue中渲染markdown内容?
文章目录 引言什么是 markdown-it?安装 markdown-it基本用法样式失效?解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中,Markdown 作为一种轻量级的标记语言,广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...
Mysql MVCC
MVCC 什么是MVCC MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本…...
Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端
文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理(1)为RestClient(2)为WebClient(3)为RestTemplate 注意 一、概述 官方文档…...
springboot医院信管系统
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...
迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序
接下来编译 LED 驱动,该驱动用于在基于华为设备框架(HDF)的系统中控制 LED 灯的开关,完整代码如下所示: 更多内容可以关注:迅为RK3568开发板篇OpenHarmony...
[javaWeb]初识Web
将该图片在浏览器中打印出来 代码: <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...



