【MySQL】定时备份脚本
#!/bin/bash
# 保存备份个数,备份31天数据
number=31
# 备份根目录
backup_root_dir=/home/mysql/backup/data
# 日期
dd=`date +%Y-%m-%d-%H-%M-%S`
# 备份工具
tool=mysqldump
# 用户名
username=root
# 密码
password='1111111111'
# 要备份的数据库列表(多个数据库名用空格分隔)
database_names=("database1" "database2" "database3")
# 如果备份根目录不存在则创建
if [ ! -d $backup_root_dir ]; then
mkdir -p $backup_root_dir
fi
# 遍历数据库列表并进行备份
for database_name in "${database_names[@]}"
do
# 为每个数据库创建独立的备份目录
database_backup_dir=$backup_root_dir/$database_name
if [ ! -d $database_backup_dir ]; then
mkdir -p $database_backup_dir
fi
# 执行备份
$tool -u $username -p$password $database_name > $database_backup_dir/$database_name-$dd.sql
# 写创建备份日志
echo "create $database_backup_dir/$database_name-$dd.sql" >> $backup_root_dir/log.txt
done
# 遍历每个数据库并删除过期备份
for database_name in "${database_names[@]}"
do
# 获取当前数据库的备份目录
database_backup_dir=$backup_root_dir/$database_name
# 找出需要删除的备份文件
delfile=`ls -l -crt $database_backup_dir/*.sql | awk '{print $9 }' | head -1`
# 判断当前数据库的备份数量是否大于$number
count=`ls -l -crt $database_backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]; then
# 删除最早生成的备份文件,只保留$number数量的备份
rm $delfile
# 写删除文件日志
echo "delete $delfile" >> $backup_root_dir/log.txt
fi
done