脚本怎样备份更新前数据

wen 实用脚本 30

本文目录导读:

脚本怎样备份更新前数据

  1. 数据库备份脚本
  2. 文件和目录备份脚本
  3. 应用配置备份
  4. 版本控制式备份
  5. 自动化备份脚本(含日志)
  6. 使用建议

数据库备份脚本

MySQL备份示例

#!/bin/bash
# 数据库备份脚本
# 配置
DB_USER="root"
DB_PASS="password"
DB_NAME="mydb"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE
# 压缩备份
gzip $BACKUP_FILE
# 保留最近7天的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
echo "备份完成: ${BACKUP_FILE}.gz"

PostgreSQL备份

#!/bin/bash
# PostgreSQL备份
PG_USER="postgres"
PG_DB="mydb"
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份
pg_dump -U $PG_USER $PG_DB > ${BACKUP_DIR}/${PG_DB}_${DATE}.sql
# 压缩
gzip ${BACKUP_DIR}/${PG_DB}_${DATE}.sql

文件和目录备份脚本

#!/bin/bash
# 文件系统备份
SOURCE_DIR="/var/www/html"
BACKUP_DIR="/backup/files"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建全量备份
tar -czf ${BACKUP_DIR}/full_backup_${DATE}.tar.gz $SOURCE_DIR
# 或创建增量备份(使用rsync)
rsync -av --delete $SOURCE_DIR ${BACKUP_DIR}/incremental_${DATE}/

应用配置备份

#!/usr/bin/env python3
# Python配置备份脚本
import json
import shutil
import os
from datetime import datetime
def backup_config(config_path, backup_dir):
    """备份配置文件"""
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    config_name = os.path.basename(config_path)
    backup_file = f"{backup_dir}/{config_name}.{timestamp}.bak"
    # 复制文件
    shutil.copy2(config_path, backup_file)
    # 读取并保存JSON格式
    with open(config_path, 'r') as f:
        config_data = json.load(f)
    with open(f"{backup_file}.json", 'w') as f:
        json.dump(config_data, f, indent=2)
    print(f"配置已备份: {backup_file}")
# 使用示例
backup_config("/etc/app/config.json", "/backup/configs")

版本控制式备份

#!/bin/bash
# Git式备份
BACKUP_DIR="/backup/git_style"
PROJECT_DIR="/var/www/project"
DATE=$(date +%Y%m%d)
# 创建快照
cp -r $PROJECT_DIR ${BACKUP_DIR}/snapshot_${DATE}
# 或使用硬链接(节省空间)
cp -rl $PROJECT_DIR ${BACKUP_DIR}/snapshot_${DATE}

自动化备份脚本(含日志)

#!/bin/bash
# 完整的自动化备份脚本
# 配置
BACKUP_ROOT="/backup"
LOG_FILE="/var/log/backup.log"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 备份函数
backup_database() {
    log "开始备份数据库..."
    if mysqldump -u root -p$DB_PASS --all-databases > ${BACKUP_ROOT}/db/all_${DATE}.sql; then
        log "数据库备份成功"
    else
        log "数据库备份失败"
        return 1
    fi
}
backup_files() {
    log "开始备份文件系统..."
    if tar -czf ${BACKUP_ROOT}/files/files_${DATE}.tar.gz /etc /var/www; then
        log "文件备份成功"
    else
        log "文件备份失败"
        return 1
    fi
}
cleanup_old_backups() {
    log "清理过期备份..."
    find $BACKUP_ROOT -name "*.sql" -mtime +$RETENTION_DAYS -delete
    find $BACKUP_ROOT -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
}
# 主执行流程
main() {
    log "开始备份任务"
    # 创建备份目录
    mkdir -p ${BACKUP_ROOT}/{db,files}
    # 执行备份
    backup_database
    backup_files
    # 清理旧备份
    cleanup_old_backups
    log "备份任务完成"
}
# 执行主函数
main

使用建议

备份策略最佳实践:

  1. 全量备份:每周一次完整备份
  2. 增量备份:每天备份变化数据
  3. 差异备份:定期备份与上次全量备份的差异

创建定时任务(crontab):

# 每天凌晨2点执行备份
0 2 * * * /path/to/backup_script.sh
# 每周日凌晨3点执行全量备份
0 3 * * 0 /path/to/full_backup.sh

备份验证脚本:

#!/bin/bash
# 验证备份完整性
verify_backup() {
    local backup_file=$1
    if [[ $backup_file == *.sql ]]; then
        # 验证SQL文件
        head -n 5 $backup_file | grep -q "CREATE TABLE" && echo "SQL备份有效"
    elif [[ $backup_file == *.tar.gz ]]; then
        # 验证tar文件
        tar -tzf $backup_file > /dev/null && echo "压缩包有效"
    fi
}

选择哪种脚本取决于你的具体需求:

  • 数据库场景:使用数据库原生工具
  • 文件系统:使用tar/rsync
  • 配置更新:使用版本控制或快照

记得定期测试备份恢复过程,确保备份可用!

抱歉,评论功能暂时关闭!