MySQL数据库备份
1.问题
1)输入MySQL用户名、密码、要备份的数据库名称存在错误
2)备份目录是否存在
3)当备份文件超过最大备份文件大小
2.分析
1)使用read -sp来输入密码时密码不会显示到屏幕上会更加的安全
2)创建一个包含日期和时间的变量
3)使用[ -d $BFLJ ]来判断路径是否存在
4)创建备份文件的完整路径
5)使用mysqldump命令进行备份
6)使用$?来查看上一条命令、检查是否备份成功
7)使用du -mb来获取文件大小并检查是否超过最大备份文件大小
8)使用gzip压缩备份文件
3.流程图
4.实现
#!/bin/bash
#提示用户输入MySQL用户名、密码、数据库名称和备份路径
read -p "请输入MySQL用户名:" USER
read -sp "请输入MySQL密码: " PASSWORD
echo
read -p "请输入要备份的数据库名称: " NAME
read -p "请输入备份文件保存的路径: " BFLJ
#获取当前日期和时间,用于命名备份文件
DATETIME=$(date +%Y%m%d_%H%M%S)
#判断备份目录是否存在
if [ -d $BFLJ ]; then
echo "目录存在"
else
echo "目录不存在"
exit
fi
#最大备份文件大小(单位:MB)
MAX_SIZE=500
#创建备份文件的完整路径
WZ="$BFLJ/$NAME$DATETIME.sql"
#使用mysqldump命令进行备份
mysqldump -u "$USER" -p"$PASSWORD" "$NAME" > "$WZ"
#检查备份是否成功
if [ $? -eq 0 ]; then
echo "数据库备份成功!备份文件保存在 $BFLJ"
#备份文件大小
SIZE=$(du -mb "$WZ" | cut -f1)
if [ "$SIZE" -gt "$MAX_SIZE" ]; then
echo "备份文件 $WZ 大小超过了 $MAX_SIZE MB,正在进行压缩..."
#使用gzip压缩备份文件
gzip "$WZ"
WZ="$BACKUP_FILE.gz"
echo "备份文件已压缩为 $WZ"
fi
else
echo "数据库备份失败!"
rm -rf $WZ
exit
fi
#可选:删除超过7天的旧备份文件(根据需求调整)
find "$BFLJ" -type f -name "*.sql" -mtime +7 -exec rm {} \;
#脚本结束
exit
5.实现解析
1)使用read -p和read -sp来输入基本信息
2)DATETIME=$(date +%Y%m%d_%H%M%S)声明获取当前日期和时间的变量
3)使用if [ -d $BFLJ ]判断备份目录存不存在,存在则继续执行,不存在则直接退出脚本
4)声明最大备份文件的大小
5)创建备份文件的完整路径
6)使用mysqldump命令进行备份
7)if [ $? -eq 0 ]检查是否备份成功,为零则表示备份成功,不为零则表示备份失败并删除创建的备份文件,退出脚本
8)备份成功后使用判断文件的大小,超过了最大值则使用gzip压缩备份文件
9)find命令查找超过7天的旧备份文件并使用rm命令进行删除(可根据自己的需求调整)
6.验证
首先创建几个库并查看
1)备份成功
2)当文件超过最大备份文件大小(这里设置成500MB,为了方便实验)
3)当备份目录不存在时
4)当用户和密码输入错误或数据库不存在时
用户和密码输入错误
数据库不存在