将此脚本添加到crontab计划中,自动留存最新的两份备份
#!/bin/bash
# 数据库配置
DB_HOST="localhost"
DB_USER="root"
DB_PASS="Sxbdc123!@#"
DB_NAME="ww"
# 备份目录
BACKUP_DIR="/opt/mysqlbak"
# 备份文件名称
BACKUP_FILE="${BACKUP_DIR}/backup-$(date +'%Y%m%d%H%M%S').sql"
# 执行备份命令
mysqldump -h${DB_HOST} -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_FILE}
# 获取最新的两个备份文件
BACKUP_FILES=($(ls -t ${BACKUP_DIR}/backup-*.sql))
BACKUP_COUNT=${#BACKUP_FILES[@]}
for ((i=0;i<BACKUP_COUNT;i++))do
echo ${BACKUP_FILES[i]}
done
echo $BACKUP_COUNT
# 删除多余的备份文件
if [ $BACKUP_COUNT > 2 ]; then
for (( i=2; i<$BACKUP_COUNT; i++ )); do
rm ${BACKUP_FILES[$i]}
done
fi
定义变量 :直接定义,变量应为唯一字段
DB_USER="root"
调用变量 :$变量名
echo $DB_USER #输出变量DB_USER
定义数组 :数组名
BACKUP_FILES
数组赋值 :数组名=(值)
BACKUP_FILES=($(ls -t ${BACKUP_DIR}/backup-*.sql)) #数组的值需要用括号括起来
ls -t ${BACKUP_DIR}/backup-*.sql 按照文件最后修改时间,查找出${BACKUP_DIR}目录下所有前缀为 backup 后缀为 .sql 的文件,放入数组中
循环数组 :for((循环条件))
for ((i=0;i<BACKUP_COUNT;i++))do
echo ${BACKUP_FILES[i]}
done
for(循环条件)
do
执行的内容
done
数组的输出 :$[数组名[ 下标 ]]
echo ${BACKUP_FILES[i]}
if 判断 :if(判断条件)then fi 条件中的2是用来控制备份数量
if [ $BACKUP_COUNT > 2 ]; then
for (( i=2; i<$BACKUP_COUNT; i++ )); do
rm ${BACKUP_FILES[$i]}
done
fi
if [ 判断条件 ];
then
条件成立所执行方法
fi