如何写自动备份数据脚本

wen 实用脚本 32

本文目录导读:

如何写自动备份数据脚本

  1. MySQL 自动备份脚本
  2. PostgreSQL 自动备份脚本
  3. MongoDB 自动备份脚本
  4. 使用 crontab 设置定时任务
  5. 增强版备份脚本(带邮件通知)
  6. Windows 批处理脚本
  7. 使用建议

MySQL 自动备份脚本

Linux Shell 脚本

#!/bin/bash
# MySQL 自动备份脚本
# 配置参数
DB_HOST="localhost"
DB_USER="root"
DB_PASS="your_password"
DB_NAME="your_database"
BACKUP_DIR="/data/backup/mysql"
RETENTION_DAYS=30
# 创建日期目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
# 创建备份目录
mkdir -p $BACKUP_PATH
# 执行备份
mysqldump -h$DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_PATH/database.sql.gz
# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "备份成功: $BACKUP_PATH/database.sql.gz"
else
    echo "备份失败"
    exit 1
fi
# 删除30天前的备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
# 日志记录
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份完成" >> $BACKUP_DIR/backup.log

PostgreSQL 自动备份脚本

#!/bin/bash
# PostgreSQL 自动备份脚本
PG_HOST="localhost"
PG_USER="postgres"
PG_PASSWORD="your_password"
PG_DATABASE="your_database"
BACKUP_DIR="/data/backup/postgres"
# 设置环境变量
export PGPASSWORD=$PG_PASSWORD
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR/$DATE
# 执行备份
pg_dump -h $PG_HOST -U $PG_USER $PG_DATABASE | gzip > $BACKUP_DIR/$DATE/database.sql.gz
# 清理旧备份(保留7天)
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete
# 清除密码变量
unset PGPASSWORD

MongoDB 自动备份脚本

#!/bin/bash
# MongoDB 自动备份脚本
MONGO_HOST="localhost"
MONGO_PORT=27017
MONGO_DB="your_database"
BACKUP_DIR="/data/backup/mongodb"
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
mkdir -p $BACKUP_PATH
# 执行备份
mongodump --host $MONGO_HOST --port $MONGO_PORT --db $MONGO_DB --out $BACKUP_PATH
# 压缩备份
cd $BACKUP_DIR
tar -zcf $DATE.tar.gz $DATE
rm -rf $DATE
# 清理30天前的备份
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +30 -delete

使用 crontab 设置定时任务

# 编辑 crontab
crontab -e
# 添加定时任务(每天凌晨2点执行备份)
0 2 * * * /path/to/backup_script.sh
# 或更详细的配置
# 每天凌晨2点备份
0 2 * * * /data/scripts/mysql_backup.sh
# 每周日凌晨3点备份
0 3 * * 0 /data/scripts/full_backup.sh
# 每小时备份
0 * * * * /data/scripts/hourly_backup.sh

增强版备份脚本(带邮件通知)

#!/bin/bash
# 配置参数
source /etc/backup_config.conf
# 邮件通知函数
send_notification() {
    local status=$1
    local message=$2
    echo "$message" | mail -s "备份状态: $status" $admin_email
}
# 备份函数
backup_database() {
    local db_user=$1
    local db_pass=$2
    local db_name=$3
    # 执行备份
    mysqldump -u$db_user -p$db_pass $db_name | gzip > $backup_path
    if [ $? -eq 0 ]; then
        send_notification "成功" "数据库 $db_name 备份成功"
        return 0
    else
        send_notification "失败" "数据库 $db_name 备份失败"
        return 1
    fi
}
# 备份多个数据库
databases=("db1" "db2" "db3")
for db in "${databases[@]}"; do
    backup_database $db_user $db_pass $db
done
# 同步到远程服务器(可选)
rsync -avz $backup_dir/ user@remote_server:/backup/

Windows 批处理脚本

@echo off
:: MySQL 自动备份脚本 (Windows)
:: 配置参数
set DB_USER=root
set DB_PASS=your_password
set DB_NAME=your_database
set BACKUP_DIR=C:\backup\mysql
set MYSQL_PATH=C:\Program Files\MySQL\MySQL Server 8.0\bin
:: 创建日期目录
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set BACKUP_PATH=%BACKUP_DIR%\%DATE%
:: 创建备份目录
if not exist %BACKUP_PATH% mkdir %BACKUP_PATH%
:: 执行备份
"%MYSQL_PATH%\mysqldump" -u%DB_USER% -p%DB_PASS% %DB_NAME% > %BACKUP_PATH%\database.sql
:: 检查结果
if %errorlevel% equ 0 (
    echo 备份成功: %BACKUP_PATH%\database.sql
) else (
    echo 备份失败
    exit /b 1
)

使用建议

  1. 测试脚本:先手动运行测试
  2. 设置权限chmod +x backup_script.sh
  3. 日志记录:添加详细日志便于排查
  4. 备份验证:定期验证备份文件完整性
  5. 异地备份:考虑同步到其他服务器
  6. 加密备份:敏感数据建议加密

需要我详细解释某个部分或有其他数据库类型的备份需求吗?

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