- Published on
mysql备份脚本
- Authors
- Name
- liuxiaobo
脚本
#!/bin/bash
# MySQL数据库连接用户名,根据实际情况修改
DB_USER="root"
# MySQL数据库连接密码,根据实际情况修改
DB_PASS="6737a7bffd67b1d5"
# 备份文件存储路径,根据实际情况修改
BACKUP_DIR="/www/lxb_mysql_backup"
# 备份文件保留数量,可自行调整
BACKUP_FILE_LIMIT=5
# 要备份的数据库列表,多个数据库以空格分隔,根据实际需求填写
DB_NAMES="aaa bbb"
# 循环备份每个数据库
for DB_NAME in $DB_NAMES
do
# 构建备份文件所在的目录路径,如果不存在则创建
BACKUP_SUB_DIR="${BACKUP_DIR}/${DB_NAME}"
mkdir -p "${BACKUP_SUB_DIR}"
# 备份文件名,包含数据库名和时间戳
BACKUP_FILE="${BACKUP_SUB_DIR}/mysql_backup_${DB_NAME}_$(date +\%Y\%m\%d\%H\%M\%S).sql"
# 使用mysqldump进行备份
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_FILE}
# 检查备份文件是否存在,如果存在则进行备份文件数量清理
if [ -f "${BACKUP_FILE}" ]; then
# 获取当前数据库的备份文件列表并按时间排序
BACKUP_FILES=$(ls -t ${BACKUP_SUB_DIR}/mysql_backup_${DB_NAME}_*.sql)
# 计算备份文件数量
FILE_COUNT=$(echo "${BACKUP_FILES}" | wc -l)
# 如果备份文件数量超过设定的限制,则删除较旧的备份文件,保留最新的文件
if [ ${FILE_COUNT} -gt ${BACKUP_FILE_LIMIT} ]; then
# 计算需要删除的文件数量
DELETE_COUNT=$((FILE_COUNT - BACKUP_FILE_LIMIT))
# 删除较旧的备份文件(除了最新的 BACKUP_FILE_LIMIT 个文件之外的文件)
for file in $(echo "${BACKUP_FILES}" | tail -n +$((${BACKUP_FILE_LIMIT}+1))); do
rm -f "${file}"
done
fi
fi
done
授权
chmod +x mysql_backup.sh
设置计划任务
crontab -e
0 * * * * /path/to/mysql_backup.sh