第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} 成功~"
认真复习一下这个案例
这一部分写的时候一定要注意空格