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

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 数据库。具体步骤如下:

  1. 首先,定义了一些变量,包括备份目录 BACKUP、当前时间 DATETIME、数据库主机 HOST、数据库用户名 DB_USER、数据库密码 DB_PW 和要备份的数据库 DATABASE
  2. 检查并创建备份目录。使用 [! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" 确保存储备份的目录存在,如果不存在则创建它。
  3. 使用 mysqldump 命令备份数据库。它将数据库的内容输出,通过管道传递给 gzip 进行压缩,并将压缩后的文件存储在 ${BACKUP}/${DATETIME}/$DATETIME.sql.gz 中。
  4. 切换到备份目录,使用 tar 命令将备份目录打包为 tar.gz 文件,以方便存储和传输。
  5. 最后,使用 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} 成功~"

认真复习一下这个案例

这一部分写的时候一定要注意空格

小结梳理


http://www.kler.cn/a/511144.html

相关文章:

  • 前端开发中的状态管理与网络请求封装
  • 【QT用户登录与界面跳转】
  • 【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?
  • Linux下源码编译安装Nginx1.24及服务脚本实战
  • [Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget
  • Jenkins-基于Role的鉴权机制
  • idea本地jar包添加到项目的maven库 mvn install:install-file
  • 聊聊如何实现Android 放大镜效果
  • Elasticsearch 和arkime 安装
  • 蓝桥杯 Python 组知识点容斥原理
  • 物联网与前沿技术融合分析
  • MySQl:使用C语言连接数据库
  • SQL Server执行计划的步骤对应于查询优化器执行给定SQL查询的部分和优化策略
  • md中的特殊占位文件路径的替换
  • Qt开发技术【C++ 实现类的二进制序列化与反序列化】
  • 使用vcpkg安装c++库时出现git网络连接报错的解决方案
  • LeetCode:46.全排列
  • doris:Kafka 导入数据
  • 异地IP属地代理业务解析:如何改变IP属地
  • 日志技术-LogBack入门程序Log配置文件日志级别
  • 满足不同场景的需求的智慧物流开源了
  • 和鲸科技受邀出席 2024(第四届)“风电领跑者”技术创新论坛
  • @Bean 控制 Spring Bean 生命周期
  • JavaScript语言的正则表达式
  • VSCODE SSH远程连接报错或无法联网安装.vscode-server
  • 深度学习篇---数据集分类