脚本是一个完整的 MySQL 数据库备份工具,它通过 mysqldump
命令将数据库导出为 SQL 文件,并将这些文件保存到指定的备份目录中。
#!/bin/bash
# 配置变量
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=root
PASS=********
BACKUP_DIR=/data/db_backup
LOG_FILE=$BACKUP_DIR/backup.log
MAX_BACKUP_DAYS=7
# 检查备份目录是否存在,如果不存在则创建
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
fi
# 获取数据库列表,排除系统数据库
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null | egrep -v "Database|information_schema|mysql|performance_schema|sys")
# 遍历每个数据库并备份
for DB in $DB_LIST; do
BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql
if mysqldump -h$HOST -u$USER -p$PASS -B $DB > "$BACKUP_NAME" 2>/dev/null; then
echo "$(date +'%F %T') $DB 备份成功" >> "$LOG_FILE"
else
echo "$(date +'%F %T') $DB 备份失败" >> "$LOG_FILE"
echo "$BACKUP_NAME 备份失败!"
fi
done
# 清理旧的备份文件
echo "$(date +'%F %T') 开始清理旧备份文件" >> "$LOG_FILE"
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +$MAX_BACKUP_DAYS -exec rm -f {} \; >> "$LOG_FILE" 2>&1
echo "$(date +'%F %T') 清理完成" >> "$LOG_FILE"
总结
这段脚本是一个功能完善的 MySQL 数据库备份工具,它涵盖了以下功能:
-
动态生成备份文件名:根据当前时间和数据库名生成唯一的备份文件名。
-
排除系统数据库:避免备份不必要的系统数据库。
-
日志记录:将备份操作的成功或失败记录到日志文件中,便于后续查看。
-
清理旧备份:自动删除超过指定天数的备份文件,避免备份目录占用过多磁盘空间。
安全性建议
-
密码管理:建议将密码存储在更安全的地方,例如 MySQL 的配置文件(
my.cnf
)中,而不是直接写在脚本中。 -
权限管理:确保备份目录和日志文件的权限正确,避免其他用户访问敏感信息。