本文目录导读:

我来教你写一个自动备份并上传的脚本,这里提供几个不同场景的版本:
基础版:备份并上传到远程服务器
#!/bin/bash
# 备份脚本配置
BACKUP_DIR="/path/to/backup" # 要备份的目录
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S)" # 备份文件名
REMOTE_USER="username" # 远程服务器用户名
REMOTE_HOST="192.168.1.100" # 远程服务器地址
REMOTE_PATH="/remote/backup/path" # 远程服务器存储路径
# 创建备份
echo "开始打包备份..."
tar -czf "${BACKUP_NAME}.tar.gz" -C "$(dirname $BACKUP_DIR)" "$(basename $BACKUP_DIR)"
# 上传到远程服务器
echo "上传到远程服务器..."
scp "${BACKUP_NAME}.tar.gz" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/"
# 验证上传是否成功
if [ $? -eq 0 ]; then
echo "备份上传成功!"
# 删除本地备份文件
rm "${BACKUP_NAME}.tar.gz"
else
echo "上传失败,本地备份保留在: ${BACKUP_NAME}.tar.gz"
fi
数据库备份 + 上传
#!/bin/bash
# 数据库配置
DB_USER="root"
DB_PASSWORD="your_password"
DB_NAME="your_database"
BACKUP_DIR="/tmp/db_backup"
# 远程存储配置
BUCKET_NAME="my-backup-bucket" # S3存储桶名
REMOTE_PATH="s3://${BUCKET_NAME}/db_backups/"
# 创建备份目录
mkdir -p ${BACKUP_DIR}
# 生成备份文件名
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"
# 备份数据库
echo "备份数据库 ${DB_NAME}..."
mysqldump -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} | gzip > ${BACKUP_FILE}
# 上传到S3
echo "上传到AWS S3..."
aws s3 cp ${BACKUP_FILE} ${REMOTE_PATH}
# 清理本地备份
rm -rf ${BACKUP_DIR}
echo "数据库备份完成!"
增强版:带日志和错误处理的备份脚本
#!/bin/bash
# 配置区
BACKUP_CONFIG=(
["source"]="/var/www/html" # 要备份的源目录
["dest"]="/backups" # 本地备份目录
["remote"]="root@backup-server:/remote/backups/" # 远程地址
["retain_days"]=7 # 本地保留天数
["log_file"]="/var/log/backup.log" # 日志文件
)
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a ${BACKUP_CONFIG[log_file]}
}
# 错误处理函数
handle_error() {
log "错误: $1"
# 发送邮件通知
echo "备份失败: $1" | mail -s "备份警报" admin@example.com
exit 1
}
# 开始备份
log "========== 开始备份任务 =========="
# 创建备份目录
mkdir -p ${BACKUP_CONFIG[dest]} || handle_error "无法创建备份目录"
# 生成备份文件名
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
BACKUP_PATH="${BACKUP_CONFIG[dest]}/${BACKUP_NAME}"
# 执行备份
log "正在备份 ${BACKUP_CONFIG[source]}..."
tar -czf ${BACKUP_PATH} ${BACKUP_CONFIG[source]} 2>&1 || handle_error "打包失败"
# 验证备份文件
if [ ! -f ${BACKUP_PATH} ]; then
handle_error "备份文件未创建"
fi
# 获取文件大小
SIZE=$(du -h ${BACKUP_PATH} | cut -f1)
log "备份文件大小: ${SIZE}"
# 上传到远程服务器
log "正在上传到远程服务器..."
rsync -avz --progress ${BACKUP_PATH} ${BACKUP_CONFIG[remote]} 2>&1 || handle_error "上传失败"
# 删除旧的本地备份
log "清理 ${BACKUP_CONFIG[retain_days]} 天前的备份..."
find ${BACKUP_CONFIG[dest]} -name "*.tar.gz" -mtime +${BACKUP_CONFIG[retain_days]} -delete
log "备份任务完成!备份文件: ${BACKUP_NAME}"
配置定时任务 (cron)
将脚本设置为每天定时运行:
# 编辑crontab crontab -e # 添加以下任一行: # 每天凌晨2点执行 0 2 * * * /path/to/your/backup-script.sh # 每天上午8点和晚上8点执行 0 8,20 * * * /path/to/your/backup-script.sh # 每6小时执行一次 0 */6 * * * /path/to/your/backup-script.sh
使用注意事项
权限设置
# 给脚本执行权限 chmod +x backup-script.sh # 安全存储密码 # 方法1:使用环境变量 export DB_PASSWORD="your_password" # 方法2:使用配置文件(.my.cnf) # [client] # user=root # password=your_password
测试运行
# 先在测试环境运行 ./backup-script.sh # 检查日志 tail -f /var/log/backup.log # 手动测试上传 ping backup-server.com ssh user@backup-server.com
多备份策略示例
#!/bin/bash
# 按日、周、月保留备份
case $(date +%d) in
01) RETAIN="monthly" ;; # 每月1号保留
1[0-6]) RETAIN="weekly" ;; # 上半月保留
*) RETAIN="daily" ;; # 其他每天保留
esac
# 根据保留策略执行不同的操作
if [ "$RETAIN" = "monthly" ]; then
# 执行完整备份
tar -czf "full_backup_$(date +%Y%m).tar.gz" /data
else
# 执行增量备份
tar -czf "inc_backup_$(date +%Y%m%d).tar.gz" /data
fi
选择哪个版本取决于你的具体需求:
- 基础版:简单、快速部署
- 数据库版:针对数据库备份
- 增强版:生产环境使用,包含日志和错误处理
- 定时任务:自动化执行
记得根据实际情况修改路径、用户名和密码等配置信息。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播